類的初始化

一個類的整個生命週期包括:加載,驗證,準備,解析,初始化,使用,卸載

初始化

  1. 運行過程中遇到如下字節碼指令時,如果類尚未初始化,那就要進行初始化:new、getstatic、putstatic、invokestatic等。這四個指定對應的Java代碼場景是:
    new: 通過new創建對象;
    getstatic,putstatic: 讀取、設置一個類的靜態成員變量(不包括final修飾的靜態變量);
    invokestatic: 調用一個類的靜態方法;
  2. 調用一個類的靜態變量
  3. 對類進行reflect反射調用,如果還沒初始化則進行初始化
  4. 如果父類還沒初始化,則初始化其父類
  5. 虛擬機啓動時,會先初始化main主類

主動引用和被動引用

直接滿足上述條件纔會初始化,被稱爲主動引用。
間接滿足上述情況不會初始化,被稱爲被動引用。

  1. 子類引用父類靜態字段
  2. 子類引用父類靜態方法
  3. 定義類的數組
  4. 調用類的常量 public static final
發佈了33 篇原創文章 · 獲贊 47 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章