黑马程序员技术交流社区

标题: 求分析,真不会??? [打印本页]

作者: 謓心い謓意    时间: 2015-6-1 09:22
标题: 求分析,真不会???
本帖最后由 謓心い謓意 于 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();怎么会执行。

作者: Drenched丶    时间: 2015-6-1 11:02
从父的构造函数看起,由于 Z 继承了 X,所以先看X 类,X类中先有new Y( )  打印Y, 在打印本类的X。然后看子类,同理。可得YZ
作者: forTomorrow    时间: 2015-6-1 11:54
先实例化父类X,由于X有成员变量,而成员变量优先于构造函数被执行,故先打印Y 接着X,父类实例化结束之后,会实例化Z
作者: forTomorrow    时间: 2015-6-1 11:55
Z中的实例化顺序也是按照先成员变量,然后构造函数,故接下来打印的是YZ
作者: 枕寒流    时间: 2015-6-1 12:19
ls厉害,,,,,,,,,,,,
作者: mishisanyi    时间: 2015-6-1 12:19
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();
        }
}
作者: 謓心い謓意    时间: 2015-6-1 13:02
Drenched丶 发表于 2015-6-1 11:02
从父的构造函数看起,由于 Z 继承了 X,所以先看X 类,X类中先有new Y( )  打印Y, 在打印本类的X。然后看 ...

主函数里创建对象 不是只调用构造方法吗  这个Y y = new Y();怎么会执行。
作者: 謓心い謓意    时间: 2015-6-2 08:09
forTomorrow 发表于 2015-6-1 11:54
先实例化父类X,由于X有成员变量,而成员变量优先于构造函数被执行,故先打印Y 接着X,父类实例化结束之后 ...

学习了 才知道原来成员变量优先于构造函数执行
作者: 謓心い謓意    时间: 2015-6-2 08:11
forTomorrow 发表于 2015-6-1 11:54
先实例化父类X,由于X有成员变量,而成员变量优先于构造函数被执行,故先打印Y 接着X,父类实例化结束之后 ...

学习了 才知道原来成员变量优先于构造函数执行
作者: 大西洋    时间: 2015-6-2 09:10
本帖最后由 大西洋 于 2015-6-2 09:37 编辑

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



作者: shao122791159    时间: 2015-6-2 22:24
new zi()   具体执行顺序
1.成员变量默认初始化
2.成员变量显示初始化
3.父类静态代码块执行
4.子类静态代码块执行
5.父类构造代码块执行
6.父类构造方法执行
7.子类构造代码块执行
8.子类构造方法被执行
作者: liuning    时间: 2015-6-3 08:43
被弄乱了,彻底无语了
作者: tougboy    时间: 2015-6-3 09:14
路过  学习  原来叠加在一起是这个样子的




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