为什么内部类不能声明静态成员?

Java Tutorial说,由于内部类与封闭类的实例相关联,因此它(内部类)不能定义任何静态成员本身。

对我来说有趣的是为什么内部类不能声明静态成员,例如,一些private static字段,这个内部类的实例可能与同一内部类的其他实例共享? 这只是Java中的一个实现,必须被视为理所当然或其他什么?

基本上只是一个武断的决定。 它没有理由得不到支持,但也没有任何理由支持它。 只是声明外部类中的静态字段。

另外,这个引用可能不完全正确:我相信你可以在内部类中声明一个静态的serialVersionUID。

因为Java语言规范如此说 :

内部类是未显式或隐式声明为静态的嵌套类。 内部类可能不会声明静态初始化器(第8.7节)或成员接口。 内部类可能不会声明静态成员,除非它们是编译时常量字段(第15.28节)。

至于为什么这样指定,我不知道。 我的猜测是内部类被设计为小助手类,其复杂性应该非常有限。

内部class可能不会声明static字段,除非它们是编译时常量。 因此,如果您将static字段声明为final ,它将起作用。

 class Foo { class Test { final static int i = 10; } } 

将完美编译和运行

static字段只能在static或顶级类型中声明。 因此,(纯) static变量只能在static class声明。

这将导致在内部类中具有静态成员变量的利益冲突。 一般来说,内部类在被实例化之前需要具有外部或封闭类的对象实例。 静态成员变量表明您甚至不需要该特定类的对象实例,在这种情况下是内部类,但内部类依赖于该类,并且只能与外部类实例共存。 你看到争论中出现利益冲突的地方吗? 但是,您可以通过将内部类声明为static来创建内部类中的静态成员变量,这意味着内部类不再需要与外部类对象共存。

 public class A { public static class B { private static JPanel myJPanel; } }