我下面這個教程創建辛格爾頓和業主有意見時,下面http://www.journaldev.com/1377/java-singleton-design-pattern-best-practices-examples實例化發生在getInstance()或getInstance()之前嗎?
public class EagerInitializedSingleton {
private static final EagerInitializedSingleton instance = new EagerInitializedSingleton();
//private constructor to avoid client applications to use constructor
private EagerInitializedSingleton(){}
public static EagerInitializedSingleton getInstance(){
return instance;
}
}
方法如果你的單例類沒有使用了大量的資源,這是 方式使用。但是在大多數場景中,爲文件系統,數據庫連接等創建的單例類爲 和我們應該避免實例化,除非客戶端調用 getInstance方法。
的問題是:
他們說我們應該避免的實例化,直到除非客戶端調用getInstance方法 但正如我在這段代碼知道實例(對象實例)總是發生時類EagerInitializedSingleton
負載和EagerInitializedSingleton
僅僅只有當我們調用加載EagerInitializedSingleton.getInstance()
=>實例化將發生在時間getInstance()
和前所未有getInstance()
參考:
靜態變量被初始化僅僅一次,在執行開始(當類加載器加載類首次)。 (從https://stackoverflow.com/a/8704607/5381331)
所以,當被加載的類?
正好有兩種情況:
- 當執行新的字節碼時(例如,FooClass F =新FooClass();)
- 並且當字節碼使靜態參考一類(例如,系統。出) (從http://www.javaworld.com/article/2077260/learn-java/learn-java-the-basics-of-java-class-loaders.html)
我錯了還是正確的。請給我一些消化。
非常感謝您的明確解釋。它幫助我理解java很多 –
@PhanVanLinh不客氣! – Mena