???????
一個來自tij第6章在繼承關系中類的加載順序的例子。
?????????
?1package?ch6;
?2
?3class?Insect{
?4????private?int?k2=print("Insect.k2?initialized");
?5????private?int?i=9;
?6????protected?int?j;
?7????Insect(){
?8????????System.out.println("i="+i+".j="+j);
?9????????j=39;
10????}

11????private?static?int?x1=print("static?insect.x1?initialized");
12????
13????static?int?print(String?s){
14????????System.out.println(s);
15????????return?47;
16????}

17}

18
19public?class?Beetle?extends?Insect{
20????
21????private?int?k=print("Beetle.k?initialized");
22????
23????public?Beetle(){
24????????System.out.println("K="+k);
25????????System.out.println("j="+j);
26????}

27????
28????private?static?int?x2=print("statci?Beetle.x2?initalized");
29????
30????public?static?void?main(String[]?args){
31????????
32????????System.out.println("Beetle?constructor");
33????????Beetle?b=new?Beetle();
34????}

35}
它的運行結果如下:

static insect.x1 initialized
statci Beetle.x2 initalized
Beetle constructor
Insect.k2 initialized
i=9.j=0
Beetle.k initialized
K=47
j=39
Press any key to continue...

其中static成員在Beetle構造器還沒有調用時就加載,剛剛才知道這點,然后是調用基類構造方法(先成員初始化,再構造方法),然后是導出類。以前一直以為順序是:基類的成員初始化—>導出類成員初始化-->基類,導出類構造方法。但事實是:基類的成員初始化—>基類構造方法—>導出類成員初始化-->導出類構造方法。