java - 非静态内部类中的静态变量

标签 java static-members inner-classes

首先我想问一下Why does Java prohibit static fields in inner classes? ,但问题已经存在。 Bozho 的回答消除了我给出的需要它们 (serialVersionUID) 的原因。不过,我还是很好奇:

静态字段是只在源代码中禁止还是在类文件中也禁止?

顺便说一句,还有一个令人信服的理由禁止这样做。在 C 中,甚至在函数内部也允许使用静态变量。它们的生命周期与任何其他静态变量相同,只是它们的可见性不同。这同样适用于 Java。

最佳答案

内部类可以定义静态字段:

Inner classes may not declare static members, unless they are compile-time constant fields (§15.28).

因此您可以定义一个序列版本 ID。

当静态字段不是常量时,那么它是合乎逻辑的不允许 - 静态字段不需要类的实例 - 它们是每个类的,而内部类需要拥有类的实例 - 如果没有它们就不能存在一个实例。虽然可以将静态字段定义为内部类,就好像它们在所属类中一样,但这会更加困惑。

关于java - 非静态内部类中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4976871/

相关文章:

java - java如何实现内部类闭包?

java - 如何在 java 中获取第 n 个 "-"(破折号)之后的字符串?

java - 临时文件、单实例锁和进程终止 (Java)

java - Android - 将位图分配给 ImageView 会更改大小

java - 如何序列化 Java 类的静态数据成员?

java - 如何在java中的另一个类中使用嵌套类?

Java 303/349 开始日期早于结束日期验证

c++ - googletest 中的参数化和共享资源测试

php - 在 PHP >= 4.3.0 中使用静态属性?

java - 外部类测试需要私有(private)内部类吗?