Java 虛擬機將描述類的數據從 Class 文件加載到內存,並對數據進行校驗、轉換解析和初始化,最終形成可被直接使用的 java.lang.Class 對象。整個過程在運行期動態完成,這正是 Java 語言動態擴展能力的基石。
類加載過程嚴格遵循:加載 → 驗證 → 準備 → 解析 → 初始化 五個階段,其中驗證、準備、解析三階段統稱為「鏈接」。
java.lang.Class 對象作為訪問入口關鍵點:類的唯一性由「全限定類名 + 類加載器實例」共同決定。陣列類由 JVM 直接創建,不經過類加載器。
可通過 -Xverify:none 關閉大部分驗證,但生產環境不建議開啟。
將常量池中的符號引用轉換為直接引用(內存地址/偏移量)。此階段不一定在初始化前完成,但必須在符號引用首次使用前完成。
<clinit>() 方法(static 變量賦值 + static 代碼塊)<clinit>() 同步執行BootstrapClassLoader (C++ 實現,加載 rt.jar)
↓ 父子關係
ExtClassLoader (加載 jre/lib/ext/*.jar)
↓
AppClassLoader (加載 classpath 下的類)
↓
CustomClassLoader (用戶自定義)
雙親委派機制確保核心類庫不被篡改,保護 Java 類型系統安全。