解决方案 »

  1.   

    ①Test3中main方法new Test2类,调用Test2的构造器
    ②调用构造器之前,类加载器要从硬盘中把Test2类加载到内存中
    ③因为Test2是Test的子类,所以也要把Test类加载进来,并且顺序是Test类->Test2类
    ④Test类加载之后,首先处理Test类的静态成员。此例中表现为静态成员赋值,并且会调用静态方法getA();(此时输出第一个数3)以及执行静态代码块(第二个数1)。如果是静态代码块前,属性在后,那就先执行静态代码块,再是属性a赋值。
    ⑤之后是Test2类,同理。(第三个数6,第四个数4)
    ⑥Test2类以及Test类加载完毕后,开始执行Test2的构造器,进入Test2构造器后,先调用父类Test类的构造器Test();(输出2)
    ⑦Test2构造器是默认构造器,调用父类构造器之后调用完毕。程序结束。
    我的理解是这样的,楼主。
      

  2.   


    我把你的代码在itbegin平台上运行了。
    为什么是这个结果:
    有几个原则:
    1.当创建对象之前,需要加载类文件,在加载的过程中,如遇到static的代码(变量、代码块)都会被初始化。而且只初始化一次且只有一次。
    1.当创建对象时,一定是先创建父类再创建子类。也就是先调用父类的构造方法再调用子类的构造方法。