为什么内部类允许"静态最终"字段?

kan*_*rbk 3 java static inner-classes

我对使用java中的内部类有疑问.这是我的代码.

码:

public class Test{

      public class InnerClass{
             public static int num = 10;
      }       

}
Run Code Online (Sandbox Code Playgroud)

这不被允许.我收到错误消息"字段num不能声明为静态;静态字段只能在静态或顶级类型中声明".

public class Test{

      public class InnerClass{
             public static final int num = 10;
      }       

}
Run Code Online (Sandbox Code Playgroud)

但这是允许的.我没有声明InnerClass为静态和顶级元素,但它是如何工作的?

Kar*_*k T 7

引用链接的答案.

8.1.2内部类和封闭实例
......
内部类不能声明静态成员,除非它们是编译时常量字段(第15.28节).

final一旦初始化,它们就是常量,= 10是一个编译时常量值.因此它是允许的.