參考資料: Java類載入過程及static詳解
java源代碼編寫 > 編譯 > class文件 > JVM字節碼 > 進JVM運行
編譯:
-
詞法分析: 將源代碼轉換為”token”
-
語法分析: 將token排成樹狀結構,分析其中的語法構造是否正確,此階段還無法判斷出句子是否有意義
-
進入JVM運行 > 載入 > 連結 > 初始化
載入:將類載入記憶體,為了確保程序執行穩定,會先委託父類加載器執行,若是遞迴往上找不到父類時,才會由子類自行加載
連結:
-
檢查: 根據JVM要求,檢查.class檔有無錯誤
-
特別有final修飾詞的在此階段會進行賦值
在此階段中,會將賦好預設值的靜態變數與代碼塊放置<clinit>的特殊方法中,
-
解析: 將常量池中的符號引用轉為直接引用(只有靜態會被解析)
例如 獲取方法&欄位的地址直,以便直接呼叫
初始化
static的初始化
靜態項目被一一執行(由父類>子類)
變數:賦值上使用者設定的值,取代原來的預設值
代碼塊:根據順序執行
在此階段中,執行<clinit>特殊方法,用使用者的值取代預設值
<clinit>不會確認父類的<clinit>是否已執行,這部分由JVM來確保
<clinit>()是初始化階段,執行的靜態構造器方法
<linit>() 與上面的差別在於,這是執行非靜態的構造方法,只有創建物件實體(呼叫建構子時),才會執行
全站熱搜
留言列表