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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 謓心い謓意 中级黑马   /  2015-6-1 09:22  /  556 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 謓心い謓意 于 2015-6-1 14:06 编辑

class X {
    Y b = new Y();
    X() {
            System.out.print("X");
    }
}
class Y {
    Y() {
            System.out.print("Y");
    }
}
public class Z extendsX {
    Y y = new Y();
   Z() {
            System.out.print("Z");
    }
   public static void main(String[] args) {
        new Z();
    }
}
答案居然是:YXYZ

没懂 求详细分析下流程顺序及原因。
主函数里创建对象 不是只调用构造方法吗  这个Y y = new Y();怎么会执行。

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

14 个回复

倒序浏览
从父的构造函数看起,由于 Z 继承了 X,所以先看X 类,X类中先有new Y( )  打印Y, 在打印本类的X。然后看子类,同理。可得YZ

点评

加油  发表于 2015-6-1 12:00
加油  发表于 2015-6-1 11:58
回复 使用道具 举报
先实例化父类X,由于X有成员变量,而成员变量优先于构造函数被执行,故先打印Y 接着X,父类实例化结束之后,会实例化Z
回复 使用道具 举报
Z中的实例化顺序也是按照先成员变量,然后构造函数,故接下来打印的是YZ
回复 使用道具 举报
ls厉害,,,,,,,,,,,,
回复 使用道具 举报
public class Z extends X  {
        Y y = new Y();
        /*
        (1)Y() {
                System.out.print("Y");
        }*/
        Z() {
        /*(2)
         * this()
                X() {
                        System.out.print("X");}
                */
                /*
                (3)Y() {
                System.out.print("Y")
                }*/
                /*(4)*/System.out.print("Z");
        }
        public static void main(String[] args) {
        new Z();
        }
}
回复 使用道具 举报
Drenched丶 发表于 2015-6-1 11:02
从父的构造函数看起,由于 Z 继承了 X,所以先看X 类,X类中先有new Y( )  打印Y, 在打印本类的X。然后看 ...

主函数里创建对象 不是只调用构造方法吗  这个Y y = new Y();怎么会执行。
回复 使用道具 举报
forTomorrow 发表于 2015-6-1 11:54
先实例化父类X,由于X有成员变量,而成员变量优先于构造函数被执行,故先打印Y 接着X,父类实例化结束之后 ...

学习了 才知道原来成员变量优先于构造函数执行
回复 使用道具 举报
forTomorrow 发表于 2015-6-1 11:54
先实例化父类X,由于X有成员变量,而成员变量优先于构造函数被执行,故先打印Y 接着X,父类实例化结束之后 ...

学习了 才知道原来成员变量优先于构造函数执行
回复 使用道具 举报
本帖最后由 大西洋 于 2015-6-2 09:37 编辑

new Z(); // 实例化整个Z类,Z类中的所有语句都会执行~  从上到下~
入口main方法就应该写在所有方法后面、放在最下面;我看有些老师喜欢把main方法写在其他方法上面。。


回复 使用道具 举报
new zi()   具体执行顺序
1.成员变量默认初始化
2.成员变量显示初始化
3.父类静态代码块执行
4.子类静态代码块执行
5.父类构造代码块执行
6.父类构造方法执行
7.子类构造代码块执行
8.子类构造方法被执行
回复 使用道具 举报
被弄乱了,彻底无语了
回复 使用道具 举报
路过  学习  原来叠加在一起是这个样子的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马