黑马程序员技术交流社区

标题: 有哪位大神给说说这道题的解题思路 [打印本页]

作者: 刘凯旋    时间: 2014-3-18 15:21
标题: 有哪位大神给说说这道题的解题思路
本帖最后由 刘凯旋 于 2014-3-19 10:18 编辑

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

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

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

        public static void main(String[] args) {
                        new Demo7();
        }
}

打印结果是YXYZ,谁给讲讲为什么是这样的结果?


作者: 水蓝    时间: 2014-3-18 15:37
这种题目,楼主自己eclipse里面debug一遍就知道了。
只有两个可能算“难点”的地方:
1、子类构造函数默认第一行调用父类无参构造函数。
2、某个类new之后属性初始化完了之后,才调用构造函数。
作者: 无道    时间: 2014-3-18 15:49
十五,对象的初始化
                        Person p = new Person("zhang",21);
                        1,因为new用到了Person.class,所以会先找到person.class文件并加载到内存中
                        2,执行该类中的静态代码块,如果有的话,给Person.class类进行初始化。
                        3,在堆内存中开辟空间,分配内存地址。
                        4,对属性进行默认的初始化,
                        5,对属性进行显示初始化。
                        6,对属性进行构造代码块初始化。
                        7,对对象进行对应的构造函数初始化。
                        8,将内存地址付给栈内存中的p变量。

1,在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句super();
2父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些
                数据进行初始化的,所以子类在对象初始化时,要先访问一下父类中的构造函数。





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