public class HelloParent {
helloY y = new helloY();
static {
System.out.println(“parent static block”);
}
HelloParent() {
System.out.println(“parent construct”);
}
}
class HelloChild extends HelloParent {
helloY y = new helloY ();
static {
System.out.println(“child static block”);
}
HelloChild() {
System.out.println(“child construct”);
}
public static void main(String[] args) {
new HelloChild();
}
}
class helloY {
helloY () {
System.out.println(“this is Y”);
}
}
如上图所示,各位看官猜猜输出顺序是怎么样的?这里只能做一个总结:
输出顺序:先父类的静态代码块—>子类的静态代码块—>父类的成员变量初始化—>
父类的构造方法—->子类的成员变量初始化—>子类的构造方法。经过机试也是没有问题的。结果如下:
parent static block
child static block
this is Y
parent construct
this is Y
child construct