Pac*_*ier 5 java inner-classes static-initializer jls
Quoth JLS#8.1.3:
内部类可能不会声明静态初始化器(第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...");
}
}
}
Run Code Online (Sandbox Code Playgroud)
既然Java的内部(非静态)类是由类加载器加载的,就像其他类一样,为什么我们不能为它们安装静态初始化器?
这种限制背后的原因是什么?
alf*_*sin -1
从定义上看,这是矛盾的:
\n\n\n\n\n\n语句或表达式出现在静态上下文中当且仅当\n 最里面的方法、构造函数、实例初始值设定项、静态\n 初始值设定项、字段初始值设定项或显式构造函数调用\n 包含该语句或表达式的语句是静态方法、 \n 静态初始值设定项、静态变量的变量初始值设定项,或\n 显式构造函数调用语句 (\xc2\xa78.8.7)。
\n\n...
\n\n当内部类(其声明不在静态上下文中出现)引用作为词法封闭类的成员的实例变量时,将使用相应词法封闭实例的变量。
\n