的渴望實例我有一個Singleton辛格爾頓
public class Singleton
{
private static Singleton instance = new Singleton();
private Singleton()
{
System.out.println("Instance created.");
}
public static Singleton getInstance()
{
return instance;
}
}
我可以運行此代碼,但沒有被創建的實例,除非getInstance()
被調用。這很奇怪,因爲我使用急切實例化,所以構造函數中的println()
應該執行。
有人可以解釋一下嗎?
那麼,你需要一種方法來首先執行該構造函數。這是與'getInstance' –
該類不會被初始化,直到「第一(嘟嘟)參考」。簡單地加載類不會初始化它,但是(除其他之外)調用類的靜態方法。 –
這個規定很清楚是什麼原因導致類的初始化:http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html#jvms-5.5 –