【发布时间】:2014-10-16 23:49:15
【问题描述】:
内部类不能声明静态初始化器 (§8.7)......
证明如下:
class A {
class B {
static { // Compile-time Error: Cannot define static initializer in inner type A.B
System.out.println("Class is initializing...");
}
}
}
既然 Java 的内部(非静态)类像其他所有类一样由 class loaders 加载,为什么我们不能为它们使用静态初始化程序?
造成这种限制的原因是什么?
【问题讨论】:
-
IMO 没有充分的理由这样做,只需在封闭类的静态初始化程序中声明即可。这也可能意味着它是实例绑定的?
-
@xTrollxDudex,外部类的静态初始化程序中的代码将在外部类加载时运行,即使内部类尚未加载。允许我们在内部类中有静态初始化器意味着我们可以延迟加载内部类的初始化代码,这是一件好事。
标签: java inner-classes jls static-initializer