为什么内部类不能使用静态初始化器?

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

来自JLS \xc2\xa78.1.3

\n\n
\n

语句或表达式出现在静态上下文中当且仅当\n 最里面的方法、构造函数、实例初始值设定项、静态\n 初始值设定项、字段初始值设定项或显式构造函数调用\n 包含该语句或表达式的语句是静态方法、 \n 静态初始值设定项、静态变量的变量初始值设定项,或\n 显式构造函数调用语句 (\xc2\xa78.8.7)。

\n\n

...

\n\n

当内部类(其声明不在静态上下文中出现)引用作为词法封闭类的成员的实例变量时,将使用相应词法封闭实例的变量。

\n
\n