黑马程序员技术交流社区

标题: 初始化顺序 [打印本页]

作者: _let'sgo    时间: 2015-11-12 16:38
标题: 初始化顺序
本帖最后由 _let'sgo 于 2015-11-12 16:41 编辑

结果为什么是
Fu
zi show 0
Zi
zi show 0
,初始化时执行顺序是什么?

  1. class Fu{
  2.        int num = 9;

  3.        {
  4.             System.out.println("Fu" );
  5.        }

  6.       Fu(){
  7.              super();//Object
  8.              //显示初始化
  9.              //构造代码块初始化
  10.             show();
  11.        }
  12.        void show(){
  13.             System.out.println("fu show " + num);//被覆盖,运行子类的
  14.        }
  15. }

  16. class Zi extends Fu{
  17.        int num = 8;

  18.       {
  19.             System.out.println("Zi" );
  20.       }

  21.       Zi(){
  22.              super();
  23.              //显示初始化
  24.              //构造代码块初始化
  25.             show();
  26.       }

  27.        void show(){
  28.             System.out.println("zi show " + num);
  29.        }
  30. }

  31. public class Demo{
  32.        public static void main(String[] args){
  33.              new Zi();
  34.        }
  35. }
复制代码




作者: 大自然的搬运工    时间: 2015-11-12 17:38
。。。。
作者: ln0491    时间: 2015-11-12 17:58
Fu
zi show 0
Zi
zi show 8
这样吧
作者: z13561291    时间: 2015-11-12 20:29
在对子类对象进行初始化时,父类的构造函数也会运行,
因为子类的构造函数默认第一行有一条隐式的语句super();
所以先运行“Fu”
然后Fu方法中没有创建对象,所以num初始化为默认int类型数值为0
所以是 zi show 0
然后是子类成员变量初始化 num赋值给8
然后是运行子类的代码块 “Zi”
因为new一个Zi()已经分配空间
这时num已经被赋值给8
所以zi show 8
顺序就是
Fu
zi show 0
Zi
zi show 8
作者: 孙建志    时间: 2015-11-13 21:17
楼上说的很正确
作者: zhauibuzhai    时间: 2015-11-13 21:48
学习.{:2_32:}{:2_32:}{:2_32:}
作者: 女神    时间: 2015-11-13 22:10
z13561291 发表于 2015-11-12 20:29
在对子类对象进行初始化时,父类的构造函数也会运行,
因为子类的构造函数默认第一行有一条隐式的语句super ...

运行过程
new ZI()  找到子类的构造方法   然后看到super()调用父类的,然后找到父类的构造方法,先运行的代码是 int num = 9    然后是构造代码块  打印一个fu  然后开始运行父类的构造方法, 看到需要调用show()  然后去子类找show方法,因为num 子类没有赋值呢  默认初始化值为0   所以打印的是zi show 0
然后父类的构造方法运行完毕,找到子类的构造方法,执行 int num = 8   接着执行子类的构造代码块  打印 zi
然后发现子类构造方法调用了 show 方法, 在子类找show方法,运行后打印的是 zi show 8
作者: oup    时间: 2015-11-13 22:43
看得有点晕




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