黑马程序员技术交流社区

标题: 一个关于构造函数的问题? [打印本页]

作者: 苏乞儿    时间: 2014-9-14 02:02
标题: 一个关于构造函数的问题?
  1. <p>class X{
  2. Y b=new Y();
  3. X(){
  4.   System.out.println("X");
  5. }
  6. }
  7. class Y{
  8. Y(){
  9.   System.out.println("Y");
  10. }
  11. }
  12. class Z extends X{
  13. Y y=new Y();
  14. Z(){
  15.   super();
  16.   System.out.println("Z");
  17. }
  18. public static void main(String[] args){
  19.   new Z();
  20. }
  21. }</p><p>建立Z的对象,到Z的构造函数去初始化,执行super语句输出一个X,然后再执行super语句下一句输出一个Z不是吗?为什么输出的不是XZ?程序的运行是按照什么顺序进行的呢,还请大牛不吝赐教啊。。。
  22. </p>
复制代码


作者: 逍遥呆    时间: 2014-9-14 02:31
我是这样理解的。
从主函数开始,创建了z的匿名对象,然后到z()里读,z先继承了x,到父类x()里先初始化,类x创建y对象,打印一个y,然后继续执行打印一个x,回到z函数中,先是建立了一个y的对象打印一个y。然后回到z继续执行。打印一个z。
作者: cs8630323    时间: 2014-9-14 06:04
父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
父类--变量
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器

这是类加载顺序,记住了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2