Java Tutorial说,由于内部类与封闭类的实例相关联,因此它(内部类)无法定义任何静态成员本身。
对我来说有趣的是为什么内部类不能声明静态成员,例如,某个private static
字段,这个内部类的实例可能与同一内部类的其他实例共享?这只是Java中的一个实现,必须被视为理所当然或其他什么?
答案 0 :(得分:6)
基本上只是一个武断的决定。没有理由无法支持,但 支持它也没有任何理由。只是声明外部类中的静态字段。
另外,该引用可能不完全正确:我相信你可以在内部类中声明一个静态的serialVersionUID。
答案 1 :(得分:2)
因为Java Language Specification says so:
内部类是一个非显式或隐式的嵌套类 声明静态。内部类可能不会声明静态初始化器 (§8.7)或成员接口。内部类可能不会声明静态 成员,除非它们是编译时常量字段(第15.28节)。
至于为什么以这种方式指定,我不知道。我的猜测是内部类被设计为小辅助类,其复杂性应该非常有限。
答案 2 :(得分:2)
答案 3 :(得分:0)
内部class
可能不会声明static
个字段,除非它们是编译时常量。因此,如果您将static
字段声明为final
,它将起作用。
class Foo {
class Test {
final static int i = 10;
}
}
将编译并完美运行
static
字段只能在static
或顶级类型中声明。因此,(纯)static
变量只能在static
class
中声明。
答案 4 :(得分:-1)
这将导致在内部类中具有静态成员变量的利益冲突。一般来说,内部类在被实例化之前需要具有外部或封闭类的对象实例。静态成员变量表明您甚至不需要该特定类的对象实例,在这种情况下是内部类,但内部类依赖于该类,并且只能与外部类实例共存。你看到争论中出现利益冲突的地方吗?但是,您可以通过将内部类声明为static来创建内部类中的静态成员变量,这意味着内部类不再需要与外部类对象共存。
public class A {
public static class B {
private static JPanel myJPanel;
}
}