| 類型 | 語法 | 執行時機 | 執行次數 | 典型用途 |
|---|---|---|---|---|
| 普通代碼塊 | 方法內 { ... } | 方法調用時,按代碼順序 | 每次調用 | 限制作用域、臨時變量隔離 |
| 構造代碼塊 | 類內 { ... } | 創建對象時,**構造器之前** | 每次 new | 多構造器公共初始化邏輯 |
| 靜態代碼塊 | 類內 static { ... } | 類加載時 (JVM 首次主動使用類) | **僅一次** | 靜態字段複雜初始化、加載原生庫、註冊驅動 |
靜態代碼塊 → main方法 → 構造代碼塊 → 構造方法
class Base {
{ System.out.println("Base 構造塊"); }
static { System.out.println("Base 靜態塊"); }
Base() { System.out.println("Base 構造器"); }
}
class Derived extends Base {
{ System.out.println("Derived 構造塊"); }
static { System.out.println("Derived 靜態塊"); }
Derived() { System.out.println("Derived 構造器"); }
}
public class BlockOrder {
{ System.out.println("Main 類構造塊"); }
static { System.out.println("Main 類靜態塊"); }
public static void main(String[] args) {
System.out.println("main 方法");
new Derived();
System.out.println("--- 再次創建 ---");
new Derived();
}
}
Main 類靜態塊
Base 靜態塊
Derived 靜態塊
Main 類構造塊
main 方法
Base 構造塊
Base 構造器
Derived 構造塊
Derived 構造器
--- 再次創建 ---
Base 構造塊
Base 構造器
Derived 構造塊
Derived 構造器
驗證:靜態塊僅首次加載執行一次,構造塊每次 new 都執行且先於構造器。
this)return 無效,僅能用於構造器