有关静态代码块、代码块、构造方法执行顺序

public class TestDemo2 {
    public static void main(String[] args) {
        new B();
    }
}

class A{
    public A(){  //无参构造
        System.out.println("a1");
    } 
    {System.out.println("a2");}  //代码块
    static{System.out.println("a3");}   //静态代码块
}

class B extends A{
    public B(){
        System.out.println("b1");
    }
    {System.out.println("b2");}
    static{System.out.println("b3");}
}

以上代码的输出结果是a3、b3、a2、a1、b2、b1

我们文字描述:

  1、首先会执行父类中的静态代码块,再执行子类中的静态代码块

  2、执行父类中的代码块、再执行父类中的构造方法

  3、执行子类中的代码块、再执行子类中的构造方法

总结:父静、子静、父非构、父构、子非构、子构

补充:

  当父类A、和子类B中有有参构造方法的时候,我们new B(“3”),通过有参构造实例化对象时,会调用父类A中的无参构造和子类B中对应的有参构造;

原文地址:https://www.cnblogs.com/my0901/p/6802691.html