我在原问题上加了一个输出“7”;便于说明父类初始化的时间; 
public class Test2 extends Test1 {     {         System.out.print("1");     } 
    Test2() {         System.out.print("2");     } 
    static {         System.out.print("3");     } 
    {         System.out.print("4");     } 
    public static void main(String[] args) {         new Test2();     } } 
class Test1 {     {         System.out.print("7");     } 
    Test1() {         System.out.print("5");     } 
    static {         System.out.print("6");     } } 
程序执行结果:6375142 调用顺序: 1、先对类进行加载:初始化静态变量,先初始化父类的静态变量,然后才是子类的静态变量; 2、对类进行初始化:在子类初始化以前,先进行父类的初始化,以及父类构造器的调用; 3、最后初始化子类,调用子类构造方法; 
在中文TIJ中,曾经说道父类的构造方法在子类的构造方法之前执行,这样说虽然不是错误的,但是是不 
完善的,应该是父类的构造方法在子类初始化之前就已经执行了。  
 
  |