Singleton 不使用 Enum(急切初始化)
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
可以说,这个例子是有效地延迟初始化。 Java 语言规范的第 12.4.1 节规定:
类或接口类型 T 将在第一次出现以下任何一个之前立即初始化:
- T 是一个类,并且创建了 T 的实例
- T 是一个类,调用 T 声明的静态方法
- 分配由 T 声明的静态字段
- 使用由 T 声明的静态字段,该字段不是常量变量
- T 是顶级类,并且执行词法嵌套在 T 中的断言语句。
因此,只要类中没有其他静态字段或静态方法,Singleton
实例将不会被初始化,直到第一次调用方法 getInstance()
。