JAVA面试题解惑之类的初始化顺序

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台的代码,然后让我们判断输出的结果。这实际上是在考查我们对于继承情况下类的初始化顺序的了解。 我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序以此是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点: Java代码 public class InitialOrderTest {

// 静态变量 public static String staticField = “静态变量”; // 变量 public String field = “变量”;

// 静态初始化块 static { System.out.println(staticField); System.out.println(“静态初始化块”); }

// 初始化块 { System.out.println(field); System.out.println(“初始化块”); }

// 构造器 public InitialOrderTest() { System.out.println(“构造器”); }

public static void main(String[] args) { new InitialOrderTest(); } }

运行以上代码,我们会得到如下的输出结果: 静态变量 静态初始化块 变量 初始化块 构造器 这与上文中说的完全符合。那么对于继承情况下又会怎样呢?我们仍然以一段测试代码来获取最终结果: Java代码 class Parent { // 静态变量 public static String p_StaticField = “父类–静态变量”; // 变量 public String p_Field = “父类–变量”;

// 静态初始化块 static { System.out.println(p_StaticField); System.out.println(“父类–静态初始化块”); }

// 初始化块 { System.out.println(p_Field); System.out.println(“父类–初始化块”); }

// 构造器 public Parent() { System.out.println(“父类–构造器”); } }

public class SubClass extends Parent { // 静态变量 public static String s_StaticField = “子类–静态变量”; // 变量 public String s_Field = “子类–变量”; // 静态初始化块 static { System.out.println(s_StaticField); System.out.println(“子类–静态初始化块”); }

[1][2]

世上最累人的事,莫过於虚伪的过日子

JAVA面试题解惑之类的初始化顺序

相关文章:

你感兴趣的文章:

标签云: