/**
* Created by xfyou on 2016/11/2.
* Java繼承的初始化
*/
public class Beetle extends Insect {
int k = prt("Beetle.k initialized");
public Beetle() {
prt("k = " + k);
prt("j = " + j);
}
static int x2 = prt("static Beetle.x2 initialized");
static int prt(String s) {
System.out.println(s);
return 63;
}
public static void main(String[] args) {
prt("Beetle constructor");
Beetle b = new Beetle();
}
}
class Insect {
int i = 9;
int j;
public Insect() {
prt("i = " + i + ", j = " + j);
j = 39;
}
static int x1 = prt("static Insect.x1 initialized");
static int prt(String s) {
System.out.println(s);
return 47;
}
}
執行結果如下:
static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor
i = 9, j = 0
Beetle.k initialized
k = 63
j = 39
執行順序總結:
1、父類靜態欄位
2、父類靜態初始化塊
3、子類靜態欄位
4、子類靜態初始化塊
5、父類例項欄位
6、父類例項初始化塊
7、父類構造器
8、子類例項欄位
9、子類例項初始化塊
10、子類構造器
沒有繼承的單個類的初始化順序為:
- 靜態欄位
- 靜態初始化塊
- 例項欄位
- 例項初始化塊
- 構造器