
類的加載程序:
當程式主動使用某個類時,如果該類還沒有被加載到記憶體中,則系統會通過如下三個步驟來對該類進行初始化:

1.類的加載:
將class檔案位元組碼內容加載到記憶體中,并將這些靜態資料轉換成為方法區的運行時資料結構,然后生成一個代表這個類的java.lang.Class物件,作為方法區中類資料的訪問入口(參考地址),所有需要訪問和使用類資料只能通過這個Class物件,加載程序需要類加載器參與,
2.類的鏈接:
類的鏈接,將Java類的二進制代碼合并到JVM的運行狀態之中的程序,
- 驗證:確保加載的類資訊符合JVM規范
- 準備:正式為類變數(static)分配記憶體并設定類變數默認初始值的階段,這些記憶體都將在方法區中進行分配,
- 決議:虛擬機常量池內的符號參考(常量名)替換為直接參考(地址)的程序
3.初始化:
- 執行類的構造方法<clinit>()方法程序,類構造方法<clinit>()方法是由編譯期自動收集類中所有類變數的賦值動作和靜態代碼塊中的陳述句合并產生的,(類構造方法是構造類資訊的,不是構造類該類實體的構造方法),
- 當初始化一個類的時候,如果發現其父類還沒有進行初始化,則需要先觸發其父類的初始化,
- 虛擬機會保證一個類的<clinit>()方法在多執行緒環境中被正確加鎖和同步,
【百面JAVA】<JavaSE面試題>類的初始化&類的實體化_范同學的知識分享園地!-CSDN博客面試題目????:public class Son extends Father{ private int i = test(); private static int j = method(); //內部靜態代碼塊: static { System.out.println("(6)"); } Son(){ System.out.println("(7)"); } //內部代碼塊: { https://blog.csdn.net/weixin_52058417/article/details/122180755?spm=1001.2014.3001.5501
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/398665.html
標籤:其他
上一篇:day01
