溫馨提示×

Java成員變量靜態(tài)代碼塊執(zhí)行時機是什么

小樊
81
2024-10-12 03:21:49
欄目: 編程語言

在Java中,靜態(tài)代碼塊(也稱為靜態(tài)初始化器)是一種特殊的代碼塊,用于初始化類級別的靜態(tài)變量和執(zhí)行僅需要執(zhí)行一次的操作。靜態(tài)代碼塊的執(zhí)行時機是在類被加載到Java虛擬機(JVM)時進行的。具體來說,靜態(tài)代碼塊的執(zhí)行順序是根據(jù)它們在類中的順序。當類被加載時,靜態(tài)代碼塊會按照它們在代碼中出現(xiàn)的順序被調(diào)用,并且每個靜態(tài)代碼塊只執(zhí)行一次。

需要注意的是,靜態(tài)代碼塊僅在類被加載時執(zhí)行一次,而不是在創(chuàng)建類的實例時執(zhí)行。此外,靜態(tài)代碼塊的執(zhí)行順序?qū)τ陬惖乃袑嵗窍嗤?,因為它們都是基于同一個類加載的。

以下是一個簡單的示例,說明了靜態(tài)代碼塊的執(zhí)行時機:

public class MyClass {
    static int staticVar1;
    static int staticVar2;

    static {
        System.out.println("靜態(tài)代碼塊1開始");
        staticVar1 = 10;
        System.out.println("靜態(tài)代碼塊1結(jié)束");
    }

    static {
        System.out.println("靜態(tài)代碼塊2開始");
        staticVar2 = 20;
        System.out.println("靜態(tài)代碼塊2結(jié)束");
    }

    public static void main(String[] args) {
        System.out.println("主方法開始");
        System.out.println("main方法結(jié)束");
    }
}

輸出結(jié)果:

靜態(tài)代碼塊1開始
靜態(tài)代碼塊1結(jié)束
靜態(tài)代碼塊2開始
靜態(tài)代碼塊2結(jié)束
主方法開始
main方法結(jié)束

從輸出結(jié)果可以看出,靜態(tài)代碼塊是在類被加載時按照它們在代碼中的順序執(zhí)行的,并且每個靜態(tài)代碼塊只執(zhí)行了一次。

0