我是java的新手。当我通过语言规范时,我发现无法声明静态类,但我们可以使用静态内部类。我有点困惑为什么我们不能拥有顶级静态类。如果我想创建一个只包含实用程序方法的类,我可以去静态类。 Java开发人员限制此功能的原因是什么?
答案 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,如果它允许将顶级类声明为静态类,则它将始终在堆内存中保存引用即使您不使用它。这是什么称为内存泄漏。所以这就是限制这样做的原因。