为什么Java中没有静态类

我是java的新手。 当我通过语言规范时,我发现无法声明静态类,但我们可以拥有静态内部类。 我有点困惑为什么我们不能拥有顶级静态类。 如果我想创建一个只包含实用程序方法的类,我可以去静态类。 Java开发人员限制此function的原因是什么?

它不是限制,您不需要static class来定义实用程序类,您只需要static methods 。 例如,java中的Math类充满了静态方法,但类本身并不是静态的。

在定义要使用的inner class ,可能只需要静态类,而不创建封闭类的实例,这在Java中是允许的。

您可以按如下方式定义实用程序类:

 class Util { public static void method(){ // your utility method } } 

根据定义,顶级类已经是顶级类,因此将其声明为静态没有意义; 这样做是错误的。

静态类声明

static是一个相对术语。

static意味着“独立于包含实例”。 因此静态字段具有相同的值,与类的实例无关。 静态内部类对父类的每个实例都有效。

但是static顶级类是什么?“独立于包含实例”? 顶级类没有包含实例。 这就是为什么它不能是static (或者,它总是static ,取决于你的观点 – 但无论如何,不​​需要指定它)。

实现方面,非static内部类包含对包含外部类的引用 。 显然,顶级课程也不可能存在这种差异。

因为它没有添加任何意义。 ‘static’在应用于嵌套类时具有意义。 它在外层阶级没有任何意义。 所以你不能指定它。

AFAIK,如果它允许顶级类被声明为静态类,那么它将始终在堆内存中保存引用, 即使你没有使用它。这就是所谓的内存泄漏。所以这就是为什么它限制这样做。