关于类的继承与初始化顺序

 1 public class A extends B {
 2   public String aStr = printString("A 非静态成员变量");
 3   public static String aSta = printString("A 静态成员变量");
 4 
 5   {
 6     System.out.println("A 代码块");
 7   }
 8 
 9   static {
10     System.out.println("A 静态代码块");
11   }
12 
13   A() {
14     System.out.println("A 构造函数");
15   }
16 
17   public static void main(String[] args){
18     System.out.println("A mian()");
19     A a = new A();
20   }
21 }
22 
23 class B extends C {
24   public String bStr = printString("B 非静态成员变量");
25   public static String bSta = printString("B 静态成员变量");
26 
27   {
28     System.out.println("B 代码块");
29   }
30 
31   static {
32     System.out.println("B 静态代码块");
33   }
34 
35   B() {
36     System.out.println("B 构造函数");
37   }
38 }
39 
40 class C {
41   public String cStr = printString("C 非静态成员变量");
42   public static String cSta = printString("C 静态成员变量");
43 
44   {
45     System.out.println("C 代码块");
46   }
47 
48   static {
49     System.out.println("C 静态代码块");
50   }
51 
52   C() {
53     System.out.println("C 构造函数");
54   }
55 
56   public static String printString(String s) {
57     System.out.println(s);
58     return s;
59   }
60 }

输出结果:

 1 C 静态成员变量
 2 C 静态代码块
 3 B 静态成员变量
 4 B 静态代码块
 5 A 静态成员变量
 6 A 静态代码块
 7 A mian()
 8 C 非静态成员变量
 9 C 代码块
10 C 构造函数
11 B 非静态成员变量
12 B 代码块
13 B 构造函数
14 A 非静态成员变量
15 A 代码块
16 A 构造函数

得出结论:

 1 * 类的继承与初始化:
 2 *  1. 父类的静态成员变量
 3 *  2. 父类的静态代码块
 4 *  3. 子类的静态成员变量
 5 *  4. 子类的静态代码块
 6 *  5. 父类的非静态成员变量
 7 *  6. 父类的代码块
 8 *  7. 父类的构造函数
 9 *  8. 子类的非静态代码块
10 *  9. 子类的代码块
11 *  10.子类的构造函数
原文地址:https://www.cnblogs.com/yanwu0527/p/8306388.html