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对象,构造方法前是才执行;
父类构造方法
子类非静态
子类构造方法