在Java中,靜態代碼塊(也稱為靜態初始化器)是一種特殊的代碼塊,用于初始化類級別的靜態變量和執行僅需要執行一次的操作。靜態代碼塊的執行時機是在類被加載到Java虛擬機(JVM)時進行的。具體來說,靜態代碼塊的執行順序是根據它們在類中的順序。當類被加載時,靜態代碼塊會按照它們在代碼中出現的順序被調用,并且每個靜態代碼塊只執行一次。
需要注意的是,靜態代碼塊僅在類被加載時執行一次,而不是在創建類的實例時執行。此外,靜態代碼塊的執行順序對于類的所有實例是相同的,因為它們都是基于同一個類加載的。
以下是一個簡單的示例,說明了靜態代碼塊的執行時機:
public class MyClass {
static int staticVar1;
static int staticVar2;
static {
System.out.println("靜態代碼塊1開始");
staticVar1 = 10;
System.out.println("靜態代碼塊1結束");
}
static {
System.out.println("靜態代碼塊2開始");
staticVar2 = 20;
System.out.println("靜態代碼塊2結束");
}
public static void main(String[] args) {
System.out.println("主方法開始");
System.out.println("main方法結束");
}
}
輸出結果:
靜態代碼塊1開始
靜態代碼塊1結束
靜態代碼塊2開始
靜態代碼塊2結束
主方法開始
main方法結束
從輸出結果可以看出,靜態代碼塊是在類被加載時按照它們在代碼中的順序執行的,并且每個靜態代碼塊只執行了一次。