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中对应的有参构造;