黑马程序员技术交流社区

标题: 程序执行问题 [打印本页]

作者: fyg408224345    时间: 2015-6-13 11:16
标题: 程序执行问题
不多说,直接上代码
class X{
                Y b = new Y();
                X() {
                        super();
                        System.out.print("X");
                }
}
class Y {
        int a = 19;
        Y() {
                System.out.print("Y");
        }
}
public class Z extends X {
        Y y = new Y();
        Z() {
                super();
                System.out.print("Z");
        }
        public static void main(String[] args) {
                new Z();
        }
}

这个程序最后执行结果是什么?为什么会是这个结果?我分析结果是XZ。可程序运行结果却是YXYZ

作者: guiqulaixi    时间: 2015-6-13 15:20
你的思路是对的,但是 源文件编译后,字节码文件里面将X类的b字段的初始化过程放到了X类的构造函数里面,同理,Z的字节码也是如此,所以,运行的时候,先是在堆内存中分配了X类与Z类声明的变量的空间 之后调用Z的构造函数进行初始化,第一步会跳到X的构造函数,由于此构造函数中会先创建Y对象返回引用给b字段赋值,所以会先打印Y 依次类推吧 所以结果就是YXYZ
作者: 黑马晓飞    时间: 2015-6-13 15:39
2楼说的很详细。赞一下!!!
作者: fyg408224345    时间: 2015-6-13 21:28
guiqulaixi 发表于 2015-6-13 15:20
你的思路是对的,但是 源文件编译后,字节码文件里面将X类的b字段的初始化过程放到了X类的构造函数里面,同 ...

谢谢哦。有点懂了。




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