类的实例化顺序

[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获取

posted @ 2020-03-03 10:41  幽暗森林之猪大屁  阅读(192)  评论(0)    收藏  举报