我很困惑。我在java中發現了很多Singleton設計模式的實現。其中我發現實現的是:單身設計模式java idioma
public class MySingleton {
private static class Loader {
static MySingleton INSTANCE = new MySingleton();
}
private MySingleton() {}
public static MySingleton getInstance() {
return Loader.INSTANCE;
}
}
如下解釋:https://stackoverflow.com。 現在,如果這個實現應該起作用,爲什麼不會出現以下情況?
public class MySingleton {
private static final MySingleton INSTANCE = new MySingleton();
private MySingleton() {}
public static MySingleton getInstance() {
return INSTANCE;
}
}
我搜索圍繞Java如何處理初始化,但找不到任何顯示後者的代碼將無法正常工作。 取而代之的是,我找到了以下內容:stackoverflow.com,它指出每個靜態初始化發生在類的靜態方法被調用之前,所以當調用訪問INSTANCE(getInstance)的唯一方法時,應該初始化包含單例實例的靜態字段。 所以是的,我真的很困惑:如果這段代碼有效,爲什麼不使用這個更簡單的單例設計模式?
後者確實有效:它是一個* eager *單例,而前者是* lazy *單例。 –