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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© date1130 高级黑马   /  2014-11-4 10:28  /  1403 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class X {
  2.         Y b = new Y();
  3.         X() {
  4.                 System.out.print("X");
  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();
  14.         Z() {
  15.                 //super
  16.                 System.out.print("Z");
  17.         }
  18.         public static void main(String[] args) {
  19.                 new Z();
  20.         }
  21. }
复制代码

看程序写结果的题,分层初始化这个词语该怎么理解?做这题需要注意什么?晕头转向的。。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

9 个回复

倒序浏览
结果是YXYZ吧,视频里这一块有讲过啊,建议你再复习一下,我看的第一遍也是没多久就忘了..就这道题而言,初始化的顺序为:子类成员变量默认初始化——父类构造函数——子类成员变量显示初始化——子类构造函数
回复 使用道具 举报
本帖最后由 李春江 于 2014-11-4 12:58 编辑

对照你自己的代码

运行结果:Y X Y Z

结果分析:
1.主函数在Z类里面,所以先执行20-21行的代码

2.由于Z继承了X类,所以在初始化自己的字段和构造方法之前,会先初始化父类的字段和构造方法。
      即:先走X类的字段第2(跳转到第9-11行)行,再X类构造方法第(3-5)行

3.最后初始化自己的字段和构造方法。
     即:先走Z类的字段 第15(跳转到第9-11行)Z类的构造方法第(16-19)行

点评

谢谢,看完你的讲解,思路很清晰了。。。  发表于 2014-11-4 13:57

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上正解
回复 使用道具 举报
应该是YXYZ吧
回复 使用道具 举报
李春江 发表于 2014-11-4 12:51
对照你自己的代码

运行结果:Y X Y Z

好详细,点个赞!
回复 使用道具 举报
学习了,果然还是有许多地方不知道啊。
回复 使用道具 举报
楼长正解!!!!
回复 使用道具 举报
new 类名();都干了什么?
1:函数特有属性默认初始化。
2:函数构造代码块初始化。
3:函数构造函数初始化。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马