初始化順序:
-
對(duì)于一個(gè)單獨(dú)的類而言:
- 靜態(tài)部分(靜態(tài)成員變量 + 靜態(tài)代碼塊):按照定義順序進(jìn)行初始化
- 普通成員(普通成員變量 + 普通代碼塊):按照定義順序進(jìn)行初始化
- 構(gòu)造函數(shù)
-
對(duì)于有父類而言:
- 父類靜態(tài)部分
- 子類靜態(tài)部分
- 父類普通成員
- 父類構(gòu)造器
- 子類普通成員
- 子類構(gòu)造器
-
由于靜態(tài)變量在普通成員之前初始化悔政,所以可以在靜態(tài)變量定義順序之前使用驰吓。
栗子:
class BaseTest {
public int a = 21;
{
System.out.println("父類普通代碼塊: " + a);
}
public static int b = 22;
static {
System.out.println("父類靜態(tài)代碼塊: " + b);
}
public BaseTest() {
System.out.println("父類構(gòu)造器");
}
}
public class Test extends BaseTest {
public int a = 23;
{
System.out.println("子類普通代碼塊: " + a);
}
public static int b = 24;
static {
System.out.println("子類靜態(tài)代碼塊: " + b);
}
public Test() {
System.out.println("子類構(gòu)造器");
}
public static void main(String[] args) {
new Test();
}
}
運(yùn)行結(jié)果:
父類靜態(tài)代碼塊: 22
子類靜態(tài)代碼塊: 24
父類普通代碼塊: 21
父類構(gòu)造器
子類普通代碼塊: 23
子類構(gòu)造器