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.子类的构造函数