黑马程序员技术交流社区

标题: 还是加载顺序的问题 [打印本页]

作者: 飞天小猪猪    时间: 2013-4-3 16:27
标题: 还是加载顺序的问题
本帖最后由 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不清楚是哪个类的,所以我改为了数字,来判断执行的顺序。 求指点
作者: 谢达    时间: 2013-4-3 20:07
lz去看下这篇文章吧。相信会对你有帮助
http://www.cnblogs.com/lmtoo/archive/2012/04/08/2437918.html




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