class A{
   int i;
   A(){
      System.out.print("A"); 
   }
}
class B extends A{
   int j;
   B(){
     System.out.print("B");
   }
}
对于以上的简单代码段,当使用new B()构造B的对象时,会先构造A的对象,通过先初始化i,然后在调用A的构造方法,然后在初始化j,调用B的构造方法,但是
new B();语句的执行入口在哪?即当java执行到这句指令时是怎么操作的?是先进入B的构造方法,通过调用super()开始构造A,还是其他的途径?此外,B()的第一句super()或者super(参数)只是简单的通知编译器构造A对象时用A中的哪个构造方法嘛?
有点困惑,请知道的朋友赐教,谢谢

解决方案 »

  1.   

    构造函数都会调用父类的构造函数,如果省略,想当于 第一句为super()
      

  2.   

    构造函数的第一条语句要么是调用其它的构造函数,要么是调用父构造函数,如果没有,则虚拟机在编译时会自动加上super()的调用.
      

  3.   

    首先构造父类,就是A的A()完了以后 再构造B的B()
      

  4.   

    1.new时分配内存空间,这时所有属性保持初始值0,false,null等
    2.构造器中是否有this()有则调用
    3.构造器中是否有super()有则调用并且当父类/父类的父类/直到Object(步骤1.2.3)的都构造完后在接着往下执行
    4.显示初始化private String str1 = "s1";
    5.构造器中的初始化B(String str){str2 = str;}