A a=new A();//为什么会输出?????
类初始化时会自动调用构造函数
类初始化时会自动调用构造函数
解决方案 »
- 帮我看看这小程序
- String 作用域问题、错误.
- 关于JTextArea的换行问题(解决问题立刻结贴)
- eclipse中的构造方法的警告,请问这是为什么?
- 关于异常的问题????
- combobox焦点设置的郁闷问题??
- 当一个窗口显示后,用鼠标拖动它的大小,怎样找到相应的事件处理函数?
- 请问:我怎么编Java程序?用什么编辑器较好?哪儿有下载?谢谢!
- 怎样用java连接sqlserver数据库,不用jdbc-odbc网桥?
- Where can I find free Preference Book about JBuilder?
- 在jb里面怎么样写数据备份和恢复的代码呢
- 用ClassLoader的loadClass(className).newInstance()时, 抛出ClassNotFoundException 求助!!!jb中为什么抛,而javac java测试可以
调用了B的构造器
A a = new A();
在B构造器的外面
怎么会调用的
?????
可是在class B 的构造器中并没有调用class A 的构造器
A a = new A();
是写在class B 构造器的外面的
怎么还会输出
AAAAAAAA
????
FT~~~
A a = new A();
那么a是不是B类的一个成员属性呢?
是B类的一个成员属性的话,要不要初始化呢?请楼主阅读Thinking in Java 2nd 前8章
赫赫,
楼主的疑惑在于认为调用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 里面关于初始化的一章有详细的说明)
new B()时,要先创建class B的类变量和成员变量,然后才执行构造函数
初始化B的instance variable,A a = new A();
开始new A();
调用A的构造函数,因为A没有instance variable;
输出AAAAAAA
完成B的初始化
调用B的构造函数
输出BBBBBBBB
完成new B(),产生了一个B类的实例
1.分配内存
2.调用constructor.而A a作为B的一个instance variable,必须先被构造,否则就无法确定B instance的大小,所以就依次递归构造instance variable.如此A在被构造之初,也必须先构造自己的instance variable。而且要注意,构造的顺序正是他们的排列顺序。