我是java新手。当我通过语言规范时,我发现静态类不能声明,但我们可以有静态内部类。我有点困惑,为什么我们不能拥有顶级静态类。如果我想创建一个只包含实用方法的类,我可以去静态类。 Java的开发人员为什么会限制这个功能?为什么Java中没有静态类
回答
这不是一个限制,你不需要static class
定义一个实用工具类,你只需要static methods
。例如,java中的类Math
充满了静态方法,但类本身是而不是静态。
当您定义要使用的inner class
时,您可能只需要静态类,而无需创建Java允许的封闭类实例。
您可以定义工具类,如下所示:
class Util {
public static void method(){
// your utility method
}
}
顶级类从定义上讲已经是顶级类,所以没有必要声明它是静态的;这样做是错误的。
据我所知,如果它将使顶级类被声明为静态类,那么它会保持在堆内存的参考所有的时间即使你不使用它。这就是所谓的内存泄漏。所以这就是为什么它被限制在这样做。
答案没有意义。不完全是你的错,因为这个问题也没有意义,但是发明不存在的不存在的功能的语义实际上并不是一个答案。 – EJP 2013-02-09 09:20:49
因为它没有增加任何意义。 'static'在应用于嵌套类时有意义。它对外部类没有意义。所以你不能指定它。
static
是一个相对术语。
static
表示“独立于包含实例”。所以一个静态字段具有相同的值,与类的实例无关。静态内部类对父类的每个实例都有效。
但是什么static
顶级类别是“独立于包含实例”?顶级类没有包含实例。这就是为什么它不能是static
(或者,它总是static
,这取决于你的观点 - 但无论如何,不需要指定它)。
执行方面,非static
内部类别包含对包含外部类别的引用。显然这种差异对顶级课程来说也是不可能的。
- 1. 为什么只有Java中的静态内部类具有静态成员?
- 2. 为什么Java中没有本地静态变量?
- 3. 为什么没有静态QDir :: makepath()?
- 4. 为什么子类中的静态块没有被执行?
- 5. 为什么静态类只能有静态成员?
- 6. 使用Java将内部类设为静态有什么优势?
- 7. 为什么我的静态类没有在ASP.NET MVC初始化?
- 8. 为什么HashMap中的Entry类在java中是静态的
- 9. 为什么公共静态类的类
- 10. 为什么C#静态类包含非静态类/结构体?
- 11. 为什么顶级类在Java中不是静态的?
- 12. 静态类和非静态类有什么区别?
- 13. 非静态类相对静态类有什么优势?
- 14. Java中的静态类有什么好处?
- 15. 为什么不能将Java类声明为静态?
- 16. 非静态类中的静态方法和静态类中的静态方法有什么区别?
- 17. 为什么所有静态方法/变量都在非静态类中?
- 18. Java:什么是静态{}?
- 19. 为什么私有静态属性为
- 20. 为什么在Java中调用静态方法没有被创建?
- 21. 为什么静态嵌套类?
- 22. C#静态类为什么使用?
- 23. 为什么Android更喜欢静态类
- 24. 为什么可以调用非静态类的静态方法?
- 25. 静态函数与类的静态指针有什么区别
- 26. 为什么非静态引用错误,而没有静态定义?
- 27. 静态类没有构造
- 28. 为什么Java没有宏?
- 29. 什么是java中的静态接口?
- 30. 有没有办法在Java中重新初始化静态类?
如果可能,您认为这意味着什么?不是一个真正的问题。 – EJP 2013-02-09 09:21:40
你应该问自己,你会有多个计算机实例吗? – 2013-02-09 09:43:20
@弗雷德里克你的评论是完全没有意义的,除非你建议在外层的“静态”有一些这样的含义,而不是。 – EJP 2013-02-09 09:53:53