我们都知道在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()之后,且在构造器其他代码之前被调用。