????? 我们都知道在java中有静态初始化块,也就是static{} ,他们会在类被加载时候调用。如果类中含有实例初始化块,也就是{}块,它会在什么时候被调用呢。
我们来看个例子:
public class InstanceInit { public InstanceInit() { System.out.println("InstanceInit created"); } static{ System.out.println("InstanceInit static Initialzer"); } { System.out.println("InstanceInit Initialzer"); } public static void main(String[] args) { new SubInstanceInit(); } } class SubInstanceInit extends InstanceInit { public SubInstanceInit() { super(); System.out.println("SubInstanceInit created"); } { System.out.println("SubInstanceInit Initializer"); } static { System.out.println("SubInstanceInit static Initializer"); } }
?运行结果是什么呢?
InstanceInit static Initialzer SubInstanceInit static Initializer InstanceInit Initialzer InstanceInit created SubInstanceInit Initializer SubInstanceInit created 从结果中可以看出实例初始化块在super()之后,且在构造器其他代码之前被调用。