2013-02-09 276 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內部類別包含對包含外部類別的引用。顯然這種差異對頂級課程來說也是不可能的。

相關問題