靜態變數初始化(含靜態區塊)優先於 main 方法執行。 類載入階段即完成靜態成員初始化,main 方法作為程式進入點在類初始化完成後才被 JVM 呼叫。
public class ExplicitStaticEx {
public static void main(String[] args) {
print("Inside main()");
Go.how();
print("Go.s1: " + Go.s1);
}
static Go g1 = new Go(); // 靜態變數初始化
static Go g2 = new Go(); // 靜態變數初始化
}
ExplicitStaticEx 類Go.s1 = "run"(靜態欄位)s2 = "drive car"; s3 = "fly plane"; print(...)static Go g1 = new Go() → 呼叫 Go() 建構子 → print("Go()")static Go g2 = new Go() → 呼叫 Go() 建構子 → print("Go()")main() 方法main() 內執行:print("Inside main()") → Go.how() → print("Go.s1: " + Go.s1)s2 & s3 initialized
Go()
Go()
Inside main()
run or drive car or fly plane
Go.s1: run
單例模式、資源預載入、配置初始化等場景利用靜態初始化特性,確保在業務邏輯執行前完成準備工作。