黑马程序员技术交流社区

标题: 求这个小程序的输出结果? [打印本页]

作者: 乐峰    时间: 2012-7-22 14:02
标题: 求这个小程序的输出结果?
本帖最后由 聂峰 于 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();
        }
}
这个程序怎么执行的?输出结果是什么?
作者: 朱烈葵    时间: 2012-7-22 14:32
YXYZ  ,new Z 因为Z继承了X 所以出现要去父类X那 初始化,但是父类第一行又是初始化Y所以又去Y哪初始化, Y 出来了,Y初始化完毕,继续自己的初始化打印X,现在初始化自己的Z类但是第一行出现了初始化Y所以又去Y哪初初始化了一次,然后就是Z了所以就产生了 YXYZ。
作者: 全海波    时间: 2012-7-22 14:50

作者: 王龙彪    时间: 2012-7-22 14:52
  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




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