java - "The static keyword does not do to a class declaration what it does to a variable or a method declaration."

标签 java static inner-classes nested-class

发件人:JavaWorld

我理解 static 只能与嵌套类一起使用,这使得它们等同于顶级类。我也明白,这使他们能够独立于封闭类进行声明。

  1. 这就是理论,有人能想出一个很好的实际例子来说明我们为什么需要这样做吗? (链接中的示例很可能是内部类 AFAIK 的示例)。

  2. 另外 - 问题背后的原因 - 为什么有一个模棱两可的名字,为什么“重用”这个词 static 并赋予它不同的含义?

最佳答案

当您的类自然嵌套时使用它,但不需要内部类在 Java 中具有的自动魔术 $this 父引用。每个非静态内部类都有一个对其包含实例的嵌入式引用。当您实际上不需要该引用时,最好不要创建它。它可能导致对象在内存中保留的时间比它们需要的时间长得多,并且当您开始序列化对象/尝试通过网络发送它们时,它也可能会很痛苦。您最终可能会得到比您更大的对象图期待或需要连载!

Map.Entry 的实现就是一个很好的例子。将其嵌套在 map 实现中显然是“自然的”,但实际上不需要将父引用保存回 map 。

对于 #2,它有何不同?字段或方法上的静态意味着它是类定义的属性而不是实例。您无需实例即可访问和使用它。嵌套类上的静态也意味着它是类定义的属性,您可以在没有实例的情况下访问和使用它。

关于java - "The static keyword does not do to a class declaration what it does to a variable or a method declaration.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5007796/

相关文章:

java - 使用静态嵌套类作为 Spring bean

java - “public” 或 “protected” 方法对于不实现任何接口(interface)的私有(private)嵌套类没有任何区别..?

java - 为什么我们不能以常规方式在外部类的主要方法中创建内部类的实例?

java - 将配置传递给每个 GUI 对象的最佳实践

C++ HashTable,两个相同的实现,但一个给出错误

java - JUnit:测试计算速度

java - 静态类中的列表会生成警告,其他数据类型不会

c++ - 其他文件中的静态函数访问

java - 如何在给定目录中动态添加文本文件,在 Java 中?

java - netty 和 comet 有某种关系吗?