我们都知道在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()之后,且在构造器其他代码之前被调用。
本文通过一个具体的Java示例,详细解析了Java中实例初始化块的执行时机及其与构造器之间的调用顺序。揭示了实例初始化块是在super()之后且在构造器其他代码之前被调用的规律。

被折叠的 条评论
为什么被折叠?



