???????
一個來自tij第6章在繼承關系中類的加載順序的例子。
?????????
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構(gòu)造器還沒有調(diào)用時就加載,剛剛才知道這點,然后是調(diào)用基類構(gòu)造方法(先成員初始化,再構(gòu)造方法),然后是導出類。以前一直以為順序是:基類的成員初始化—>導出類成員初始化-->基類,導出類構(gòu)造方法。但事實是:基類的成員初始化—>基類構(gòu)造方法—>導出類成員初始化-->導出類構(gòu)造方法。
一個來自tij第6章在繼承關系中類的加載順序的例子。
?????????
?1
package?ch6;
?2
?3
class?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
19
public?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
}
它的運行結(jié)果如下:
?2

?3



?4

?5

?6

?7



?8

?9

10

11

12

13



14

15

16

17

18

19



20

21

22

23



24

25

26

27

28

29

30



31

32

33

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構(gòu)造器還沒有調(diào)用時就加載,剛剛才知道這點,然后是調(diào)用基類構(gòu)造方法(先成員初始化,再構(gòu)造方法),然后是導出類。以前一直以為順序是:基類的成員初始化—>導出類成員初始化-->基類,導出類構(gòu)造方法。但事實是:基類的成員初始化—>基類構(gòu)造方法—>導出類成員初始化-->導出類構(gòu)造方法。