JVM 在加载外部类的过程中, 是不会加载静态内部类的, 只有内部类的属性/方法被调用时才会被加载, 并初始化其静态属性
静态内部类单例模式中实例由内部类创建,由于 JVM 在加载外部类的过程中, 是不会加载静态内部类的, 只有内部类的属性/方法被调用时才会被加载, 并初始化其静态属性。静态属性由于被 static 修饰,保证只被实例化一次,并且严格保证实例化顺序。
import java.io.Serializable;
/**
* 单例模式(静态内部类)
* 描述:
*
* @author lyn
* @date 2022/3/29 18:23
*/
public class Singleton implements Serializable {
private static final long serialVersionUID = 1L;
private Singleton() {
//防止反射破坏代理模式
if (getInstance() != null) {
throw new RuntimeException();
}
}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
/**
* 防止序列化破坏单例模式
*
* @return
*/
private Object readResolve() {
return SingletonHolder.INSTANCE;
}
}