Java類什麼情況下被初始化?

[浪子回頭]發表於2019-07-28

 

1.建立類的例項(new 的方式)。訪問某個類或介面的靜態變數,或者對該靜態變數賦值,呼叫類的靜態方法

2.反射的方式

3.當初始化一個類的時候,如果發現其父類還沒有進行初始化,則需先觸發其父類的初始化。

4.Java虛擬機器啟動時被標明為啟動類的類,直接使用java.exe命令來執行某個主類(包含main方法的那個類)

5.當使用 JDK 1.7 的動態語言支援時,如果一個 java.lang.invoke.MethodHandle 例項最後的解析結果 REF_getStatic、REF_putStatic、REF_invokeStatic 的方法控制程式碼,並且這個方法控制程式碼所對應的類沒有進行過初始化,則需先觸發其初始化。

 

Java類的載入是動態的,它並不會一次性將所有類全部載入後再執行,而是保證程式執行的基礎類(像是基類)完全載入到jvm中,至於其他類,則在需要的時候才載入。這當然就是為了節省記憶體開銷。

 

相關文章