2013-02-09 100 views
2

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

+1

如果可能,您认为这意味着什么?不是一个真正的问题。 – EJP 2013-02-09 09:21:40

+0

你应该问自己,你会有多个计算机实例吗? – 2013-02-09 09:43:20

+1

@弗雷德里克你的评论是完全没有意义的,除非你建议在外层的“静态”有一些这样的含义,而不是。 – EJP 2013-02-09 09:53:53

回答

6

这不是一个限制,你需要static class定义一个实用工具类,你只需要static methods。例如,java中的类Math充满了静态方法,但类本身是而不是静态。

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

您可以定义工具类,如下所示:

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

据我所知,如果它将使顶级类被声明为静态类,那么它会保持在堆内存的参考所有的时间即使你不使用它。这就是所谓的内存泄漏。所以这就是为什么它被限制在这样做。

+0

答案没有意义。不完全是你的错,因为这个问题也没有意义,但是发明不存在的不存在的功能的语义实际上并不是一个答案。 – EJP 2013-02-09 09:20:49

1

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

2

static是一个相对术语。

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

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

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

相关问题