一道Java初始化的笔试题 from Netease

非常惊奇的发现,自己一年前还总结了 Thinking in Java 中关于初始化部分的内容。想想当时 Thinking in Java 应该看了一半左右,或许该重新捡起来看了。

题目:运行 B.java 的输出结果:

显然,这是一道 Java 初始化的题目,笔试当时就懵了……首先 methodx 对应的输出是几就来回找了好几遍(一屏放不下整个程序)。其次只记得会先初始化静态方法,然后构造函数,整个流程先父类后子类,最后随便选了一个了事。。。

在 JDK 1.8的运行结果:3,6,7,2,1,5,4

搜了一下自己之前看 Thinking in Java 时的笔记,看到这么一句话:

父类static成员 -> 子类static成员 -> 父类普通成员初始化和初始化块 -> 父类构造方法 -> 子类普通成员初始化和初始化块 -> 子类构造方法

不过感觉还是有些乱,为什么先初始化的父类的静态变量和构造,然后再初始化的子类的静态变量和构造?最近还在复习集合类的相关知识,之后再来搜一搜初始化的内容吧。

附一篇对 static 初始化讲解的博客文章:http://blog.csdn.net/darxin/article/details/5293427 或许可以从字节码中看到一些有用的信息

发表评论

电子邮件地址不会被公开。 必填项已用*标注