为什么Java中没有静态类

时间:2013-02-09 06:32:21

标签: java

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

5 个答案:

答案 0 :(得分:7)

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

<强> Static class declarations

答案 1 :(得分:6)

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

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

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

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

答案 2 :(得分:3)

static是一个相对术语。

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

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

实施方面,非static内部类包含对包含外部类的引用。显然,对于顶级课程来说,这种差异也是不可能的。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

AFAIK,如果它允许将顶级类声明为静态类,则它将始终在堆内存中保存引用即使您不使用它。这是什么称为内存泄漏。所以这就是限制这样做的原因。

相关问题