A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乐峰 中级黑马   /  2012-7-22 14:02  /  1689 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 聂峰 于 2012-7-22 16:31 编辑

class X {
        Y b = new Y();
        X() {
                        System.out.print("X");
        }
}

class Y {
        Y() {
                        System.out.print("Y");
        }
}

public class Z extends X {
        Y y = new Y();
        Z() {
                        System.out.print("Z");
        }

        public static void main(String[] args) {
                        new Z();
        }
}
这个程序怎么执行的?输出结果是什么?

3 个回复

倒序浏览
YXYZ  ,new Z 因为Z继承了X 所以出现要去父类X那 初始化,但是父类第一行又是初始化Y所以又去Y哪初始化, Y 出来了,Y初始化完毕,继续自己的初始化打印X,现在初始化自己的Z类但是第一行出现了初始化Y所以又去Y哪初初始化了一次,然后就是Z了所以就产生了 YXYZ。

点评

嗯哪我懂了,,谢谢  发表于 2012-7-22 15:32
回复 使用道具 举报

点评

谢谢你的分析图  发表于 2012-7-22 15:32
回复 使用道具 举报
  1. package cn.heima;

  2. class X
  3. {
  4.         Y b = new Y();//第3步,先初始化类中的成员变量

  5.         X()//第5步,调用构造方法,打印了X
  6.         {
  7.                 System.out.print("X");
  8.         }
  9. }

  10. class Y
  11. {
  12.         Y()
  13.         {
  14.                 System.out.print("Y");//第4步,被new X()调用,打印了Y        //第7步,被new Z()调用,打印了Y
  15.         }
  16. }

  17. public class Z extends X
  18. {
  19.         Y y = new Y();//第6步,调用super()结束后,初始化本类变量

  20.         Z()
  21.         {
  22.                 System.out.print("Z");//第8步,执行构造方法,打印了Z
  23.         }

  24.         public static void main(String[] args)//第1步,main函数入口
  25.         {
  26.                 new Z();//第2步,初始化 Z 对象,调用父类构造方法
  27.         }
  28. }
复制代码
所以输出结果是:YXYZ

点评

已经知道结果了。。谢谢  发表于 2012-7-22 15:33
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马