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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘凯旋 中级黑马   /  2014-3-18 15:21  /  1210 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘凯旋 于 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,谁给讲讲为什么是这样的结果?

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

2 个回复

正序浏览
十五,对象的初始化
                        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父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些
                数据进行初始化的,所以子类在对象初始化时,要先访问一下父类中的构造函数。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报 1 0
这种题目,楼主自己eclipse里面debug一遍就知道了。
只有两个可能算“难点”的地方:
1、子类构造函数默认第一行调用父类无参构造函数。
2、某个类new之后属性初始化完了之后,才调用构造函数。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马