class Fu{ Fu() { show(); } void show() { System.out.println("xixi"); }}class Zi extends Fu{ int num = 9; // 构造代码块 { System.out.println("constructor code..." + num); num = 10; } // 构造函数 Zi() { super(); // 显示初始化 // 构造代码块初始化 System.out.println("zi constructor..." + num); } void show() { System.out.println("show..." + num); }}class Test{ public static void main(String[] args) { new Zi(); }}// 输出结果:// show...0// constructor code...9// zi constructor...10
流程如下图所示:
// 示例二:class A { static { System.out.print("1"); } public A() { System.out.print("2"); }}class B extends A{ static { System.out.print("a"); } public B() { System.out.print("b"); }}public class Hello { public static void main(String[] args) { A ab = new B(); ab = new B(); }}// 执行结果: 1a2b2b// 创建对象时构造器的调用顺序是:先初始化静态成员,然后调用父类构造器,再初始化非静态成员,最后调用自身构造器。参考资料