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