Java 类与对象的初始化


面试的时候,经常会遇到这样的笔试题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和静态块,它们只包含一些简单的输出字符串到控制台的代码,然后让我们写出正确的输出结果。这实际上是在考察我们对于类的初始化知识的了解。

首先,我们先看看下面的代码,这就是很经典的考察方式。

public class InitField {
    public static void main(String[] args) {
        SuperInitField p = new SuperInitField();
        SuperInitField c = new SubInitField();
    }
}

class SuperInitField {
    public SuperInitField() {
        System.out.println("parent");
    }
    static {
        System.out.println("static parent");
    }

}

class SubInitField extends SuperInitField {
    public SubInitField() {
        System.out.println("child");
    }
    static {
        System.out.println("static child");
    }
}

不管你是否能很快速的写出正确的答案,我们先把这个程序放一边,了解一下Java虚拟机初始化的原理。

JVM通过加装、连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用。类型的生命周期如下图所示:

    

装载和连接必须在初始化之前就要完成。

  • 1
  • 2
  • 下一页

相关内容