A a=new A();//为什么会输出?????
类初始化时会自动调用构造函数

解决方案 »

  1.   

    new B();
    调用了B的构造器
    A a = new A();
    在B构造器的外面
    怎么会调用的
    ?????
      

  2.   

    呵呵, 你自己生成了一个A的对象,却问为什么会输出, 你从前没有任何编程经验?对象通过构造器完成初始化, 你生成了对象A a = new A(); 最后那个A()就调用了构造器A()
      

  3.   

    class C 中调用了class B 的构造器
    可是在class B 的构造器中并没有调用class A 的构造器
    A a = new A(); 
    是写在class B 构造器的外面的
    怎么还会输出
    AAAAAAAA
    ????
      

  4.   

    to slash5437(slash):
    FT~~~
    A a = new A();
    那么a是不是B类的一个成员属性呢?
    是B类的一个成员属性的话,要不要初始化呢?请楼主阅读Thinking in Java 2nd 前8章
      

  5.   

    来完一步,让楼上的说了
    赫赫,
    楼主的疑惑在于认为调用constructor是系统创建object的第一件事(由于a不是在b 的consturctor 里面被创建的,所以好像不应该显示AAAAAA,或者至少不应该在BBBBB之前显示 ),但是事实并非如此,系统创建object时,在调用constructor之前还有一大堆事情要做,其中之一就是初始化该对象的instance variable,正如楼上所说,你的例子中对象a 是作为 B的一个instance variable, 在系统调用B的constructor之前初始化的,而该初始化又(最终)调用了a的constructor,所以才会输出AAAAAAAAA....(然后系统调用B的constructor, 输出BBBBBB...)
    希望解释够清楚 (同意楼上,thinking in java 3rd 里面关于初始化的一章有详细的说明)
      

  6.   

    class B里又一个成员变量是class A类型的
    new B()时,要先创建class B的类变量和成员变量,然后才执行构造函数
      

  7.   

    同意FredLiu(党魁),该说的都让你们说了,我把执行顺序罗列出来吧,希望有点帮助。开始new B();
      初始化B的instance variable,A a = new A();
        开始new A();
           调用A的构造函数,因为A没有instance variable;
              输出AAAAAAA
      完成B的初始化
      调用B的构造函数
        输出BBBBBBBB
    完成new B(),产生了一个B类的实例  
      

  8.   

    当new 一个类时,它要为它所有的成员变量即属性开辟内存空间,而你的成员变量a 是一个对象所以它要先执行A类
      

  9.   

    java编程思想是本好书有时间可以好好看一看
      

  10.   

    class 被构造时所做的事有两件:
    1.分配内存
    2.调用constructor.而A a作为B的一个instance variable,必须先被构造,否则就无法确定B instance的大小,所以就依次递归构造instance variable.如此A在被构造之初,也必须先构造自己的instance variable。而且要注意,构造的顺序正是他们的排列顺序。