3

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

4

5 回答 5

7

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

静态类声明

于 2013-02-09T06:35:31.147 回答
7

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

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

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

class Util {
  public static void method(){
     // your utility method
  }
}
于 2013-02-09T06:47:26.947 回答
4

static是一个相对术语。

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

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

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

于 2013-02-09T09:31:55.710 回答
1

因为它没有增加任何意义。“静态”在应用于嵌套类时具有意义。它对外部类没有任何意义。所以你不能指定它。

于 2013-02-09T09:20:25.673 回答
0

AFAIK,如果它允许将顶级类声明为静态类,那么即使您不使用它,它也会一直将引用保存在堆内存中。这就是所谓的内存泄漏。所以这就是它的原因被限制这样做。

于 2013-02-09T08:41:41.147 回答