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