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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 飞天小猪猪 中级黑马   /  2013-4-3 16:27  /  1341 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HM朱俊 于 2013-4-4 13:01 编辑
  1. class X
  2. {
  3.         Y b1 = new Y(1);
  4.         X()
  5.         {
  6.            System.out.print("2");
  7.         }
  8. }
  9. class Y
  10. {
  11.         Y(int y)
  12.     {
  13.       System.out.print(y);
  14.     }
  15. }
  16. public class Z  extends X
  17. {
  18.         Y y = new Y(3);
  19.         Z()
  20.         {
  21.                 super();
  22.                 System.out.print("4");
  23.         }
  24.         public static void main(String[] args)
  25.         {
  26.            new Z();
  27.         }
  28. }
复制代码
输出结果是1234 说明程序运行的时候是这样的 先读Z中的main方法,创建Z对象的时候先走Z的构造函数初始化,Z是X的子类,所以Z的构造函数中有句隐式的super()语句,这时就要先走X的构造函数 而在X函数中,构造函数前有个成员变量是Y类的对象,从答案开来是先存入了Y的对象,然后才是X的构造函数初始化。然后又是Z类中的成员Y的对象走在Z的构造函数之前,还是很疑惑。
之前也有人问过这个问题,地址是http://bbs.itheima.com/thread-39545-1-1.html ,答案是YXYZ,看下面的解答都说是先加载了Z中的Y对象然后才是X中的X和Y。其中两个Y不清楚是哪个类的,所以我改为了数字,来判断执行的顺序。 求指点

1 个回复

倒序浏览
lz去看下这篇文章吧。相信会对你有帮助
http://www.cnblogs.com/lmtoo/archive/2012/04/08/2437918.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马