我是新手Java。当我查看语言规范时,发现不能声明静态类,但我们可以有静态内部类。我有点困惑为什么不能有顶级静态类。如果我想创建仅包含实用程序方法的类,我可以选择静态类。为什么Java开发者限制了这个功能呢?
这不是一种限制,你不需要使用static class
来定义一个实用工具类,只需要使用static methods
即可。例如,在Java中,Math
类充满了静态方法,但该类本身并非静态的。
当你定义一个内部类并希望在不创建封闭类实例的情况下使用它时(在Java中是允许的),可能只需要静态类。
你可以按照以下方式定义实用程序类:
class Util {
public static void method(){
// your utility method
}
}
static
是一个相对的概念。
static
表示“独立于包含该实例的实例”。因此,静态字段具有相同的值,与类的实例无关。静态内部类对父类的每个实例都有效。
但是,static
顶级类将“独立于包含该实例的实例”指的是什么呢?顶级类没有包含实例。这就是为什么它不能是static
的原因(或者说它总是static
,这取决于您的观点 - 但在任何情况下,都不需要指定它)。
在实现上,非static
内部类包含对包含外部类的引用。显然,对于顶级类来说,这种区别也是不可能的。