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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张森 中级黑马   /  2013-1-3 10:43  /  2534 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

有谁能具体的讲解下下面的运行流程,谢谢。
class X {
        Y b = new Y();
        X() {
                        System.out.print("X");
        }
}
class Y {
        Y() {
                        System.out.print("Y");
        }
}
public class Z extends X {
        Y y = new Y();
        Z() {
                        System.out.print("Z");
        }
        public static void main(String[] args) {
                        new Z();
        }
}

5 个回复

正序浏览
每个类都有一个构造方法吗?隐式或者显式的构造{:3_62:}
回复 使用道具 举报
张森 发表于 2013-1-3 22:23
thks  一目了然

恩 我等着版主给技术分呢、这两天回复的比较多、得分不多、
可能他们也比较忙吧、放假了、、、
回复 使用道具 举报
刘文超 发表于 2013-1-3 10:50
lz你好,我先给你写一下执行过程,并在代码中标注了1、2、3、4一共四行代码,过会要提到:
首先代码执行mai ...

thks  一目了然
回复 使用道具 举报
子类先调用父类的构造方法,在调用自己的
回复 使用道具 举报
本帖最后由 刘文超 于 2013-1-3 11:15 编辑

lz你好,我先给你写一下执行过程,并在代码中标注了1、2、3、4一共四行代码,过会要提到:
首先代码执行main函数new Z(),准备执行Z的构造方法;
在执行之前必须先执行父类X的构造方法才行,也就X();
但是,在执行构造方法X()的方法体之前要先对默认的属性Y b进行初始化,执行语句1;打印:Y
之后执行X()的方法体:语句2;打印X
---父类构造方法执行完毕,要回到本类中去,即Z的构造中;
同理,在执行Z()方法体之前要先对Z的属性Y y初始化,执行语句3;打印Y
最后执行Z()的方法体,执行4;打印Z
  1. class X {
  2.         Y b = new Y();  //1

  3.         X() {
  4.                 System.out.print("X");  //2
  5.         }
  6. }

  7. class Y {
  8.         Y() {
  9.                 System.out.print("Y");
  10.         }
  11. }

  12. public class Z extends X {
  13.         Y y = new Y();           //3

  14.         Z() {
  15.                 System.out.print("Z");      //4
  16.         }

  17.         public static void main(String[] args) {
  18.                 new Z();
  19.         }
  20. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马