我想了解一個類加載並初始化時的確切場景。我看到下面的兩篇文章給出不同的答案類加載和初始化
javarevisited - A類類是用在Java中創建whenan實例的初始化無論新()關鍵字或使用反射使用Class.forName(),這可能拋出Java中的ClassNotFoundException。
Java world-那麼,什麼時候分類加載?有兩種情況:執行新的字節碼時(例如,FooClass f = 新的 FooClass();)以及字節碼對類(例如System.out)進行靜態引用時的情況。
所以當我使用new關鍵字創建一個類的實例是類加載或初始化?
另一件事要問關於裝載由於引用變量:
javarevisited - 類加載是由類加載器中的Java可以實現儘快急切地加載類爲其他類引用完成,或延遲加載類,直到需要類的初始化發生
是什麼筆者通過參考這裏是什麼意思?他是否暗示如果A類具有B類的引用變量,那麼B類在其引用在A中遇到時會被加載?
但筆者下面說類NOTUSED不加載,但我看到有ClassInitializationTest類的參考
/** * 這是不是在這個程序中使用的Java類,因此不是由JVM */
class NotUsed {
static { System.out.println("NotUsed Class is initialized "); }
}
加載3210
通過閱讀文章,javaworld文章更加簡單化,並提供了高層次的概述,而javarevisited文章更多地涉及細節,因此它們不完全相互矛盾,只是談論不同的事情。至於你的參考問題,是的,這就是它的意思。 – Oleg