如果先调用 super class 然后再调用 subclass 会发生什么?

What happens if a call super class first and subclass after?

class A{
    public A(){ System.out.println("A constructor"); }
    static { System.out.println("A static init block"); }}

class B extends A{
    public B(){ System.out.println("B constructor"); }
    static { System.out.println("B static init block"); }}

public class Test {

    public static void main(String[] args) {

        A a = new A();
        B b = new B();

    }

}





Selected Answer:    
A static init block

A constructor

B static init block

A constructor

B constructor

第一部分很明确,Superclass会先执行。 “ B b = new B(); ”部分怎么样?这个子类会转到超类吗?如果是这样,为什么不第二次打印“A static init block”?如果一个子类不去超类,为什么打印“A constructor”?

提前致谢!

静态初始化块在class加载后执行一次。 由于 class A 在实例化 A 时加载,因此在实例化 B 时不再需要加载它。因此静态初始化程序不再 运行。

每次创建 class 的实例时,构造函数都是 运行。由于该实例不仅是其直接 class 的实例,而且还是 superclass 的实例,如果您未在 sub 中显式执行,则隐式调用 superclass 构造函数class 构造函数。因此,每次实例化 class.

时, superclass 构造函数也是 运行