┌─────────────────────────────────────────────────────────────┐ │ 1. 啟動階段 (類載入過程) │ │ 載入 → 驗證 → 準備 → 解析 → 初始化 │ ├─────────────────────────────────────────────────────────────┤ │ 2. 使用階段 (對象實例化與 GC) │ │ 實例化 → 使用 → 垃圾收集 → 終結 │ ├─────────────────────────────────────────────────────────────┤ │ 3. 結束階段 (類卸載) │ │ 類卸載 (僅用戶類加載器載入的類) │ └─────────────────────────────────────────────────────────────┘
java.lang.Class 實例作為訪問入口static final 編譯期常量值在準備階段直接賦值<clinit> 先於子類執行 (接口除外,接口初始化不要求父接口先初始化)new、反射、克隆、反序列化創建實例Class.forName、Method.invoke 等特定 APIpublic static void main)被動使用 (訪問父類靜態字段、定義數組、訪問常量) 不會 觸發初始化。
new 操作符Class.newInstance() / Constructor.newInstance() (反射)Object.clone()ObjectInputStream.readObject() (反序列化)String[]Class 對象String 對象+ 生成 StringBuilder/String<init>() (構造器):按聲明順序賦顯式值 → 執行構造器代碼void finalize(),GC 釋放內存前調用finalize() 拋出的異常被忽略,不保證執行順序/時間try-with-resources / Cleaner / PhantomReference