黑马程序员技术交流社区

标题: 考考大家,稍后公布答案! [打印本页]

作者: 渴望学习    时间: 2014-7-20 22:12
标题: 考考大家,稍后公布答案!
20.运行以下代码片段,输出结果是?( )
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();
        }
}
A. Z
B. YZ
C. XYZ
D. YXYZ
作者: 爨庚轩    时间: 2014-7-20 22:16
           D               
作者: 渴望学习    时间: 2014-7-20 22:28
爨庚轩 发表于 2014-7-20 22:16
D

嗯。 您是对的。!!!!
作者: xiaogh    时间: 2014-7-20 22:42
不会,很诧异为什么是D,debug了下之后理解了
作者: lemon_tree    时间: 2014-7-20 22:55
我也认为是选d,
作者: hjfeng1987    时间: 2014-7-20 23:12
先进入父类构造函数的吧
作者: DSY    时间: 2014-7-20 23:38
楼主可以分享下原因吗           
作者: ws484664    时间: 2014-7-20 23:49
瞧瞧         
作者: 渴望学习    时间: 2014-7-26 11:19
DSY 发表于 2014-7-20 23:38
楼主可以分享下原因吗

不好意思,刚刚看到,现在说一下原因
当new z(); 的时候 首先要把 class z 加载进内存中,而class z 继承了 Class  x 所以在 加载 class z 之前要 先加载 class x  当加载class x的时候 就已将创建了 Y对象,并打印了 Y,(在创建对象之前 calss Y已经加载到内存中来了哦),在 创建子类对象的时候 默认先调用父类的构造函数,打印了X 然后再 加载 class Z 又打印一个  Y 然后再 打印 Z
作者: 高老强    时间: 2014-7-26 11:28
没看懂,证明我基础差得离谱




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