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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© j816326 中级黑马   /  2013-6-13 19:53  /  1406 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面这个程序是我在本论坛看的一个小程序,可我有点迷惑,在main方法调用new Demo()方法时Demo类到底加载了没有,如果加载了 为什么成员变量没有先加载? 如果没加载 那么怎么能调用Demo类的构造函数呢  ?求解释详细的
class X {
        X() {
                System.out.print("X");
        }
        Y b = new Y();
}

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

class Demo extends X {
        Y y = new Y();

        Demo() {
                System.out.print("Z");
        }

        public static void main(String[] args) {

                new Demo();

        }

}

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 神马都是浮云

查看全部评分

7 个回复

正序浏览
楼主说的成员变量没有先加载指的是哪个成员变量?

Demo类中的那个成员变量
回复 使用道具 举报
继承是 is a  所属关系。

也就是在构造函数初始化中
Demo() {
//隐含了   super(); 这样一个语句。会自动调用父类的空参构造函数。
                System.out.print("Z");
        }
回复 使用道具 举报
先开始new Demo,因为是继承类,所以一切先从父类加载.
而父类中先加载成员变量.

这样能算解决问题了么..
回复 使用道具 举报
j816326 发表于 2013-6-13 21:49
看清楚我的问题啊 我也知道程序的流程  就是疑惑在main方法调用new Demo()方法时Demo类到底加载了没有,如 ...

楼主说的成员变量没有先加载指的是哪个成员变量?
回复 使用道具 举报
看清楚我的问题啊 我也知道程序的流程  就是疑惑在main方法调用new Demo()方法时Demo类到底加载了没有,如果加载了 为什么成员变量没有先加载? 如果没加载 那么怎么能调用Demo类的构造函数呢  
回复 使用道具 举报
我是这么理解的..
1.new Demo(); 首先调用其父类的构造方法,也就是class X
2.class x中再执行Y b = new Y();  接着打印"X",即输出为YX
3.执行完父类的构造方法,返回执行Y y = new Y(); 再输出一个Y
4.最后打印"Z"..
回复 使用道具 举报
先加载父类构造代码块 再加载父类构造函数 再加载子类构造代码块 再加载子类构造函数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马