网站首页 > 技术文章 正文
static关键字含义
1. 为什么要使用static
有一些数据不必要隶属于每个对象, 例如Chinese类的country属性就应该是China,并且所有对象都应该是相同的, 这样的数据就可以声明成static的, 这样的数据就隶属于类, 通过类就可以直接访问, 当然通过对象也可以访问.
有一些方法也是相同的道理, 可以被static修饰, 这样的方法只需要通过类调用即可, 不需要创建对象。
2. 使用了static后的变化
使用了static以后的数据不再是不确定的, 就像对象的创建就是不确定的(也可称之为动态), static是确定的, 和动态形成对比, 所以称之为静态。
3.使用范围:
在Java类中,可用static修饰属性、方法、代码块、内部类
4.被修饰后的成员具备以下特点:
① 随着类的加载而加载
② 优先于对象存在
③ 修饰的成员,被所有对象所共享
④ 访问权限允许时,可不创建对象,直接被类调用
static修饰属性
1. 类属性
2. 类属性的存储
类属性保存在方法区的类信息数据区中
3. 类属性的使用
类属性可以直接通过类名使用
4. 静态属性的特点
因为隶属于类, 所以静态属性通常是共享数据
static 修饰方法
1. 类方法(class Method)
没有对象的实例时,可以用类名.方法名()的形式访问由static标记的类方法。
在static方法内部只能访问类的static属性,不能访问类的非static属性。
class Person {
private int id;
private static int total = 0;
public static int getTotalPerson() {
The output is:
Number of total is 0
Number of total is 1
id++;//非法
return total;
}
public Person() {
total++;
id = total;
}
public static void main(String[] args) {
System.out.println("Number of total is " +Person.getTotalPerson());
//没有创建对象也可以访问静态方法
Person p1 = new Person();
System.out.println( "Number of total is "+ p1.getTotalPerson());
}
}
2. 类方法特点
类方法隶属于类, 不能在其中直接访问对象属性, 如果想要访问对象属性, 必须先创建对象, 通过对象再访问对象属性. 而在非静态方法中, 可以直接调用类方法.
单例设计模式
设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。
单例(Singleton)设计模式-饿汉式
public class Single {
//private的构造器,不能在类的外部创建该类的对象
private Single() {}
//私有的,只能在类的内部访问, 并且在声明同时就创建唯一对象
private static Single onlyone = new Single();
//getSingle()为static,不用创建对象即可访问
public static Single getSingle() {
return onlyone;
}
}
public class TestSingle {
public static void main(String args[]) {
Single s1 = Single.getSingle(); //访问静态方法
Single s2 = Single.getSingle();
if (s1==s2){
System.out.println("s1 == s2!");
}
}
单例(Singleton)设计模式-懒汉式
class Singleton {
//1.将构造器私有化,保证在此类的外部,不能调用本类的构造器。
private Singleton(){
}
//2.先声明类的引用
//4.也需要配合static的方法,用static修饰此类的引用。
private static Singleton instance = null;
//3.设置公共的方法来访问类的实例
public static Singleton getInstance(){
// 3.1如果类的实例未创建,那么先要创建,然后返回给调用者:本类。因此,需要static 修饰。
if(instance == null){
instance = new Singleton();
}
//3.2 若有了类的实例,直接返回给调用者。
return instance;
}
}
暂时懒汉式还存在线程安全问题,讲到多线程时,可修复
举例:java.lang.Runtime
了解更多内容:
- 上一篇: 服务响应时间的衡量指标(服务响应时效方案)
- 下一篇: 浅谈分库分表那些事儿(分库分表的原理)
猜你喜欢
- 2024-09-26 Java学习:基础(static、单例)(java里static用法)
- 2024-09-26 代码区、常量区、静态区(全局区)、堆区、栈区不得不了解
- 2024-09-26 “静态”之静——深入解析C++中的static关键字
- 2024-09-26 java基础3种变量类型(详解、区别)
- 2024-09-26 Java static关键字你了解多少?(java中static关键字有什么作用)
- 2024-09-26 再也不要说不知道static了(ip route-static命令详解)
- 2024-09-26 夯实基础:详解static关键字和5类场景应用
- 2024-09-26 Java学习:static 关键字概述(static关键字的作用 java)
- 2024-09-26 Java基础:static关键字作用总结(javastatic关键字详解)
- 2024-09-26 JAVA 泛型中的通配符 T,E,K,V,?你都弄懂了吗?我都总结在这
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 573℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 513℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 486℃启用MySQL查询缓存(mysql8.0查询缓存)
- 469℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 449℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 447℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)