class SuperTest
{
   private String name = “Default Name”;  //1
   public SuperTest(){
   System.out.println(“SuperTest Construct”);//2

}class Test extends SuperTest
{
   private static String const1 = “CONST”;//3
public Test(){
 System.out.println(“Test Construct”); //4

public static void main(String[] args){
    new Test(); //5
}
}
(A).3,5,1,2,4
(B).5,3,4,1,2
(C).3,5,2,4,1
(D).5,3,4,2,1

解决方案 »

  1.   

    答案选:A1、Test在new对象的时候调用了Test()构造方法,在此之前这个类的static修饰的属性name也在内存分配了空间。所以首先在使用类的时候初始化了该类的静态属性,在是调Test()构造方法。
    此时执行了:3和52、然后,判断该类是否存在extends继承关键字,如果有,在该Test()构造方法中,隐式调用父类SuperTest的构造方法。跳到父类里,首先判断父类类名后面有没有extends关键字,这里没有,所以执行了类里的属性或方法,这里执行了私有的name属性,在执行构造方法SuperTest()体,此时:输出:“SuperTest Construct”。执行了:1和23、执行完父类的构造方法后,回到子类的构造方法里,此时输出:“Test Construct”,此时执行了:4所以最后控制台的运行结果为:
    SuperTest Construct
    Test Construct4、执行步骤为:3 5 1 2 4
      

  2.   

    JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。 
    先初始化父类的静态代码--->初始化子类的静态代码--> 
    初始化父类的非静态代码--->初始化父类构造函数---> 
    初始化子类非静态代码--->初始化子类构造函数 
      

  3.   

    我选a的理由:
    父类的构造函数一定要先于子类的,即 2一定得在4前面。 所以B D肯定不对。
    属性的初始化要先于构造函数的,所以C也错。
    最后就是A对。3楼讲得很清楚,学习了!