代码块执行顺序。

class Father1{

static{
System.out.println("....static Father.....");
}

{
System.out.println(".....父类非静态。。。");
}

public Father1(){
System.out.println("---父类构造方法----");
}
}

class Son1 extends Father1{

static{
System.out.println("....static Son.....");
}



public Son1(){
System.out.println("---子类构造方法-----");
}
{
System.out.println(".....子类非静态。。。");
}
}

public class Demo3 {


static{
System.out.println("....主函数静态代码.....");
}

{
System.out.println(".....主函数非--------静态代码。。。");
}

public static void main(String[] args) {

Son1 s = new Son1();
System.out.println("----输出完毕-------");
Demo3 d = new Demo3();
}

}

执行结果:

....主函数静态代码.....
....static Father.....
....static Son.....
.....父类非静态。。。
---父类构造方法----
.....子类非静态。。。
---子类构造方法-----
----输出完毕-------
.....主函数非--------静态代码。。。

所以顺序是:

从主函数所在的类执行静态代码块,

从父类执行静态代码块。

从子类执行静态代码块。

非静态代码块要在new对象,构造方法前是才执行;

父类构造方法

子类非静态

子类构造方法

原文地址:https://www.cnblogs.com/daxiong225/p/4589718.html