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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张金铎 中级黑马   /  2013-5-13 22:10  /  1304 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张金铎 于 2013-5-13 22:44 编辑
  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.                         System.out.print("Z");
  16.         }

  17.         public static void main(String[] args) {
  18.                         new Z();
  19.         }
  20. }
复制代码
我觉得就输出XZ啊,为什么结果跟我想的不一样啊,求高手能给分析下么?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 任江峰 于 2013-5-13 22:40 编辑

类的实例化过程:
1,加载.class类文件。
2,执行static静态代码块,如果有的话。
3,开辟内存空间,分配内存地址。
4,创建对象特有的属性,执行默认初始化。
5,对对象的属性执行显示初始化。
6,执行构造代码块。
7,执行构造函数。
8,new表达式返回对象引用。
这里的new Z();

由于Z类继承X类,加载Z类之前会加载X类。加载X类的过程:
执行第4步,创建对象特有的属性,执行默认初始化。 Y b =null;
执行第5步,对对象的属性执行显示初始化。 b= new Y();//new Y的对象会执行Y的构造函数,输出"Y"
执行第7步,执行本类的构造函数。 执行X类的构造函数,输出"X"

然后会加载Z类,加载Z类的过程:
执行第4步,创建对象特有的属性,执行默认初始化 Y b =null;
执行第5步, 对对象的属性执行显示初始化。 b= new Y();//new Y的对象会执行Y的构造函数,输出"Y "
执行第7步, 执行本类的构造函数。 执行Z类的构造函数,输出"Z"

所以最终的输出结果是:"YXYZ"






评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 尹丽峰 于 2013-5-13 22:57 编辑
  1. package heima;

  2. class X {//加载x类
  3. Y b = new Y();// 2 new Y 直接去加载Y类 Y类中的构造函数Y()初始化 输出 Y
  4. X() {
  5. System.out.print("X");//3 加载x类的同时 构造函数初始化 so 输出X
  6. }
  7. }

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

  13. public class Z extends X { //继承X类 就先加载X类 请看X类
  14. Y y = new Y();//4 new y(); 构造函数 Y在此执行 输出 Y
  15. Z() {
  16. System.out.print("Z");
  17. }

  18. public static void main(String[] args) {
  19. new Z();// 1 执行靠的是main关键字 所以从这里开始
  20. }
  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
任江峰 发表于 2013-5-13 22:19
类的实例化过程:
1,加载.class类文件。
2,执行static静态代码块,如果有的话。

很清楚,谢谢啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马