我是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