一、成员变量
- 有 static 修饰的成员变量称为静态成员变量,属于类,在内存中只存储一份,只加载一次,可以被共享访问。访问格式
类名.静态成员变量
- 无 static 修饰的成员变量称为实例成员变量,属于对象。访问格式
对象.实例成员变量
二、成员方法
- 有 static 修饰的成员方法称为静态成员方法,属于类。访问格式
类名.静态成员方法
,使用场景:以执行一个通用功能为目的,或者需要方便访问 - 无 static 修饰的成员方法称为实例成员方法,属于对象。访问格式
对象.实例成员方法
,使用场景:表示对象自己的行为,且方法中需要访问实例成员
三、static访问注意
- 静态成员变量和静态成员方法是属于类的,执行时类加载后会同时加载静态成员变量(堆内存)或静态成员方法(方法区)
- 静态方法只能访问静态的成员,不可以直接访问实例成员,但是可以间接访问(创建对象访问)
- 实例方法可以访问静态成员,也可以访问实例成员
- 静态方法中不能出现this关键字(因为this表示当前对象)
四、代码块
- 静态代码块:
- 格式:static{}
- 特点:需要使用static关键字修饰,随着类加载而加载,并且自动触发、只执行一次、优先执行
- 使用场景:在类加载的时候做一些静态数据初始化的操作,以便后续使用
- 构造代码块:
- 格式:{}
- 特点:每次创建对象,调用构造器执行时都会执行该代码块中的代码,且先于构造器
- 使用场景:初始化实力资源
五、static应用
- 设计模式 ---- 单例模式
- 保证系统中应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象。
- 实现方式:饿汉单例模式、懒汉单例模式、…
- 饿汉单例设计模式:在类获取对象的时候,对象已经提前创建好了
public class SingleInstance {
public static SingleInstance instance = new SingleInstance();
private SingleInstance() {
}
}
- 懒汉单例设计模式:在需要使用该对象时才去创建对象(延迟加载对象)
public class SingleInstance {
private static SingleInstance instance;
private SingleInstance() {
}
public static SingleInstance getInstance() {
if (instance == null){
instance = new SingleInstance();
}
return instance;
}
}