2012-10-13 57 views
0

包裝類Integer具有靜態方法parseInt()其中使用這樣的:我們可以在Java中沒有對象的情況下調用非靜態類的方法嗎?

Integer.parseInt(); 

我認爲只有靜態類的方法可以被稱爲像這樣(即Class.doMethod())。所有非靜態類都需要實例化對象才能使用它們的方法。

我檢查了API,顯然Integer被宣佈爲public final Integer - 不是靜態的。

+0

「靜態類」是什麼意思? –

+5

這個類是靜態的並不重要 - 它是_method_是否是靜態的。 –

回答

7

任何類都可以同時包含static和非靜態方法。在任何類上調用static方法(包括您自己的方法)時,不需要需要實例化類的實例,只需使用類名稱MyClass.methodName()調用該方法即可。

事實上,即便下面的工作:

Integer nullInt = null; 
nullInt.parseInt("5"); 

這工作,因爲只有參考的類調用static方法時是非常重要的。但考慮到這種不好的風格:總是使用例如改爲Integer.parseInt

另請注意,無論如何您無法聲明頂級類爲static:只能將嵌套/內部類聲明爲靜態。

+0

救世主! :) :) :) – user9371102

2

不,你錯了。

只有靜態方法可以像這樣調用,但它們可能屬於'非靜態'類。

0

一種表達方式:Integer是一個具體的對象;你可以有很多Integer。只有一個Integer.MAX_VALUE

也就是說,Integer有一些具體的東西,其他的只需要存在一次,任何地方。

+0

我發現「'整數'是一個具體的對象'有點混亂...... *一個*整數'是一個具體的對象,'整數'是一個類。 –

2

在java中,可以從對象中調用靜態方法,但這隻會生成一個警告並仍然會編譯。 一個非靜態類可以擁有靜態字段和所有實例共享的方法(這就是爲什麼「Shared」在VB.NET中表示靜態的原因)。因此,從對象訪問靜態成員會使讀者感到困惑,必須避免。

相關問題