类的实例化顺序
[Java] 纯文本查看 复制代码
|
01
02
03
04
05
06
07
08
09
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
36
37
38
39
40
41
42
43
44
45
46
47
|
public class ClassInit { public static void main(String[] args) { System.out.println("1"); new B(); }} class A { static { System.out.println("A的static代码块..."); } public String s1 = prtString("A的成员变量..."); public static String s2 = prtString("A的static变量..."); protected A() { System.out.println("A的构造函数..."); } { System.out.println("A的代码块"); } public static String prtString(String str) { System.out.println(str); return null; }} class B extends A { public String ss1 = prtString("B的成员变量..."); public static String ss2 = prtString("B的static变量..."); public B() { System.out.println("B的构造函数..."); } private static A a = new A(); static { System.out.println("B的static代码块..."); } { System.out.println("B的代码块..."); }} |
返回结果如下:
A的static代码块...
A的static变量...
B的static变量...
A的成员变量...
A的代码块
A的构造函数...
B的static代码块...
A的成员变量...
A的代码块
A的构造函数...
B的成员变量...
B的代码块...
B的构造函数...
顺序是:当创建类对象时,先初始化静态变量和静态块,然后是非静态变量和非静态代码块,然后是构造器。由于静态成员只会被初始化一次,所以如果静态成员已经被初始化过,将不会被再次初始化。
更多java学习资料可关注:itheimaGZ获取

浙公网安备 33010602011771号