文章目录
1. static是什么
- static是静态的意思,可以修饰成员变量和成员方法。
- static修饰成员变量表示该成员变量只在内存中只存储一份,可以被共享访问,修改。
2. static变量
2.1 成员变量分类
- 静态成员变量(有static修饰,属于类,内存中加载一次),推荐用
类名.静态成员变量
的方式访问。 - 实例成员变量(无static修饰,存在于每个对象中),用
对象.实例成员变量
的方式访问 - 同一个类中访问静态成员变量可以省略类名。
2.2 static变量的内存原理
3. static成员方法
3.1 static成员方法使用
- 静态成员方法(有static修饰,归属于类),建议用类名访问,也可以用对象访问。
- 实例成员方法(无static修饰,归属于对象),只能用对象触发访问。
- 表示对象自己的行为,且方法中需要访问实例成员的,则该方法必须申明成实例方法。
- 如果该方法是以执行一个共用功能为目的,则可以申明成静态方法。
3.2 static成员方法内存原理
4. 注意事项
- 静态方法只能访问静态成员,不可以直接访问实例成员。
- 实例方法可以访问静态成员、实例成员。
- 静态方法中不可以出现this关键字。
5. 应用
5.1 工具类
定义: 类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用的 。
特点:
- 方便调用,提高代码复用。
- 工具类无需创建对象,建议将工具类构造器私有。
5.2 代码块
静态代码块:
- 格式:static{}
- 特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次。
- 场景:在类加载的时候做一些静态数据初始化的操作,以便后续使用
构造代码块: - 格式:{}
- 特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并在构造器执行前执行。
- 使用场景:初始化实例资源
5.3 单例
单例模式: 一个类永远只有一个实例。
5.3.1 饿汉单例模式
在用类获取对象的时候,对象已经提前为你创建好了。
设计步骤:
- 定义一个类把构造器私有。
- 定义一个静态变量存储一个对象。
public class SingleInstance {
//提前准备一个对象
public static SingleInstance instance = new SingleInstance();
//必须把构造器私有化
private SingleInstance(){
System.out.println("创建了一个对象");
}
}
5.3.2 懒汉单例设计模式
- 在真正需要该对象的时候,才去创建一个对象(延迟加载对象)。
public class LazySingleInstance {
//定义一个静态私有成员变量负责存储单例,只加载一次
private static LazySingleInstance lazySingleInstance;
//私有化的构造器
private LazySingleInstance(){};
//提供一个方法返回单例对象
public static LazySingleInstance getLazySingleInstance(){
if(lazySingleInstance==null){
lazySingleInstance = new LazySingleInstance();
}
return lazySingleInstance;
}
}