1,首先创建了一个B的对象,进入B的无参构造函数,默认第一行有一句super(),所以进入A的无参构造函数,所以执行静态代码块,打印"A"
2,回到B的无参构造函数,执行静态代码块,打印"D",然后执行A的无参构造函数打印"B"
3,在B中创建了一个有参的A对象,调用A的有参构造函数,遇到this()关键字,调用自己的无参构造函数,打印"B",再打印一个"C",继续执行,打印一个E
结果: A D B B C E
public class Test {
public static void main(String[] args) {
new B();
}
}
class A {
static {
System.out.println("A"); //1父类静态代码块随类的加载加载 A
}
A() {
System.out.println("B"); //3 创建对象初始化 B
}
A(int i) { // 4this()调用构造函数A() 打印B
this();
System.out.println("C"); // 5 打印C
}
}
class B extends A {
static {
System.out.println("D"); //2 子类静态代码块随类的加载而加载 D
}
A a = new A(123); //4 创建对象调用父类的方法 A(int i)
B() {
System.out.println("E"); // 6最后执行 打印 E