我是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. 爲什麼靜態類只能有靜態成員?
- 3. 使用Java將內部類設爲靜態有什麼優勢?
- 4. 爲什麼我的靜態類沒有在ASP.NET MVC初始化?
- 5. 爲什麼C#靜態類包含非靜態類/結構體?
- 6. 靜態類和非靜態類有什麼區別?
- 7. Java中的靜態類有什麼好處?
- 8. 爲什麼不能將Java類聲明爲靜態?
- 9. 非靜態類中的靜態方法和靜態類中的靜態方法有什麼區別?
- 10. 爲什麼所有靜態方法/變量都在非靜態類中?
- 11. Java:什麼是靜態{}?
- 12. 爲什麼私有靜態屬性爲
- 13. 爲什麼靜態嵌套類?
- 14. 爲什麼Android更喜歡靜態類
- 15. Java:靜態類?
- 16. 具有靜態方法的靜態類和具有靜態方法的常規類之間有什麼不同?
- 17. 爲什麼沒有NSHTTPURLProtocol類?
- 18. 爲什麼Java中的LinkedList實現將Node嵌套類視爲靜態?
- 19. 在RPython中靜態類型是什麼?
- 20. iPhone - 爲什麼靜態分析儀沒有選擇?
- 21. 爲什麼我的Go應用程序沒有靜態鏈接?
- 22. 爲什麼這個靜態函數沒有調試符號?
- 23. 爲什麼父類的靜態方法隱藏在子類中?
- 24. 爲什麼我們要在普通類中聲明靜態類?
- 25. 有沒有什麼辦法在靜態方法中檢測目標類?
- 26. 非靜態類中靜態方法的要點是什麼?
- 27. JAVA:什麼時候該類應該是靜態或動態的
- 28. 爲什麼在java中沒有sizeof
- 29. 爲什麼Java中沒有「Equlable」接口?
- 30. 什麼是Java中的靜態嵌套類?
如果可能,您認爲這意味着什麼?不是一個真正的問題。 – EJP 2013-02-09 09:21:40
你應該問自己,你會有多個計算機實例嗎? – 2013-02-09 09:43:20
@弗雷德裏克你的評論是完全沒有意義的,除非你建議在外層的「靜態」有一些這樣的含義,而不是。 – EJP 2013-02-09 09:53:53