1、说明顺序问题:在Java 中,调用构造方法 new 一个对象时,执行顺序为:
a.调用父类的static 部分
b.调用子类(当前类)中的static 部分
c.调用父类的构造方法(初始化子类中继承于父类属性)
d. 调用子类的构造方法。(初始化子类自身独有的属性)
注:static 部分从上至下执行
2、main方法是执行程序的入口,但是只有当前类的static加载完成之后,才执行main方法体内容;
3、解题:执行顺序为:
A、当在Windows下的cmd中敲下 Java App 时,App类被加载进内存。此时,
1:执行 private static App d = new App();
new APP()操作流程:
参照new 对象顺序:此时直接执行调用构造器初始化成员变量 private SubClass t
即 执行 new SubClass();
再次参照 new 对象顺序,此时,先执行 SubClass中的 static 部分即
static { System.out.println("1"); }
接着执行父类构造方法 SuperClass(){System.out.println("构造superClass");}
最后执行子类构造方法 public SubClass(){ System.out.println("2"); }
完成 new SubClass() 流程;
初始化成员变量之后执行构造方法体内容,即: public App() { System.out.println("构造器"); }
到此,完成 new APP()操作;
赋值给 d ;
到此,完成第一个static 加载;
2:执行 static { System.out.println("静态块");}
3:加载完 static 部分后,现在开始执行 main 方法体中的程序,即 {System.out.println("Hello");}