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()