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