JAVA 面试题解惑系列(一) ——类的初始化顺序文章分类:Java 编程大家在去参加面试的时候, 经常会遇到这样的考题: 给你两个类的代码, 它们之间是继承的关系, 每个类里只有构造器方法和一些变量, 构造器里可能还有一段代码对变量值进行了某种运算, 另外还有一些将变量值输出到控制台的代码, 然后让我们判断输出的结果。这实际上是在考查我们对于继承情况下类的初始化顺序的了解。我们大家都知道, 对于静态变量、静态初始化块、变量、初始化块、构造器, 它们的初始化顺序以此是静态变量> 静态初始化块> 变量> 初始化块> 构造器。我们也可以通过下面的测试代码来验证这一点: Java 代码 public class InitialOrderTest { // 静态变量 public static String staticField =" 静态变量"; // 变量 public String field =" 变量"; // 静态初始化块 static { (staticField); (" 静态初始化块"); } // 初始化块{ (field); (" 初始化块"); } // 构造器 public InitialOrderTest() { (" 构造器"); } public static void main(String[] args) { new InitialOrderTest(); }} public class InitialOrderTest { // 静态变量 public static String staticField =" 静态变量"; // 变量 public String field =" 变量"; // 静态初始化块 static { (staticField); (" 静态初始化块"); } // 初始化块{ (field); (" 初始化块"); } // 构造器 public InitialOrderTest() { (" 构造器"); } public static void main(String[] args) { new InitialOrderTest(); }} 运行以上代码,我们会得到如下的输出结果: 静态变量静态初始化块变量初始化块构造器这与上文中说的完全符合。那么对于继承情况下又会怎样呢?我们仍然以一段测试代码来获取最终结果: Java 代码 class Parent { // 静态变量 public static String p_StaticField =" 父类-- 静态变量"; // 变量 public String p_Field =" 父类-- 变量"; // 静态初始化块 static { (p_StaticField); (" 父类-- 静态初始化块"); } /
JAVA面试题解惑系列1 来自淘豆网m.daumloan.com转载请标明出处.