天天看點

【java_jvm】類加載、類初始化、反射機制

  • 參考文章
https://www.cnblogs.com/ityouknow/p/5603287.html
  • 類的生命周期
  1. 加載
  2. 連接配接

    2.1 驗證

    四個驗證:檔案格式、中繼資料、位元組碼、符号引用
    2.2 準備
    為類的靜态變量配置設定記憶體,并初始化為預設值
    2.3 解析
    把類中的符号引用轉換為直接引用(将指針指向記憶體區域,即覆寫預設值)
  3. 初始化

    3.1

    假如類未加載和連接配接,則執行加載和連接配接
    3.2
    假如該類的父類還沒有被初始化,則執行父類初始化
    3.3
    假如類中有初始化語句,則依次執行初始化語句
  4. 使用
  5. 解除安裝
  • 類加載的途徑

– 從本地系統中直接加載

– 通過網絡下載下傳.class檔案

– 從zip,jar等歸檔檔案中加載.class檔案

–從專有資料庫中提取.class檔案

– 将Java源檔案動态編譯為.class檔案

  • 類初始化的時機

-new 一個執行個體

-通路類(接口)中的靜态變量

-調用類(接口)的靜态方法

-反射 如

Class.forName(HungrySingleton.class.getName());

-初始化某個類的子類,父類會先被初始化

-java虛拟機啟動時被标明為啟動類的類(Java Test)

  • 總結

    類加載在初始化之前,當使用反射的時候類加載已經完成,類的靜态成員變量已經成功指派。