在Java中,static
關(guān)鍵字用于聲明靜態(tài)成員(包括靜態(tài)變量和靜態(tài)代碼塊)。類(lèi)的初始化順序主要受到以下因素影響:
例如:
public class MyClass {
static int a;
static {
a = 1;
System.out.println("Static block 1");
}
static int b;
static {
b = 2;
System.out.println("Static block 2");
}
}
輸出順序?yàn)椋?/p>
Static block 1
Static block 2
例如:
public class MyClass {
static int a;
int b;
static {
a = 1;
System.out.println("Static block");
}
public MyClass() {
b = 2;
System.out.println("Constructor");
}
}
輸出順序?yàn)椋?/p>
Static block
Constructor
例如:
public class ParentClass {
static int a;
static {
a = 1;
System.out.println("Parent static block");
}
}
public class ChildClass extends ParentClass {
static int b;
int c;
static {
b = 2;
System.out.println("Child static block");
}
public ChildClass() {
c = 3;
System.out.println("Child constructor");
}
}
輸出順序?yàn)椋?/p>
Parent static block
Child static block
Child constructor
總之,Java中類(lèi)的初始化順序主要受到靜態(tài)成員和非靜態(tài)成員的聲明順序以及繼承關(guān)系的影響。靜態(tài)代碼塊的執(zhí)行順序通常決定了靜態(tài)變量的初始化順序,而非靜態(tài)成員變量的初始化順序遵循它們?cè)陬?lèi)中出現(xiàn)的順序。