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