亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java:何時使用靜態方法

Java:何時使用靜態方法

Java:何時使用靜態方法我想知道何時使用靜態方法?假設我有一個帶有幾個getter和setter的類,一個或兩個方法,我希望這些方法只能在類的實例對象上調用。這是否意味著我應該使用靜態方法?例如Obj x = new Obj();x.someMethod要么Obj.someMethod(這是靜態方式嗎?)我很困惑!
查看完整描述

4 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

一個經驗法則:問問自己“即使沒有構建Obj,這個方法也有意義嗎?” 如果是這樣,那肯定是靜態的。

所以在一個類中Car你可能有一個double convertMpgToKpl(double mpg)靜態的方法,因為人們可能想知道35mpg轉換成什么,即使沒有人建造過汽車。但是void setMileage(double mpg)(設置一個特定Car的效率)不能是靜態的,因為在構建任何Car之前調用該方法是不可思議的。

(順便說一下,反過來并不總是這樣:你有時可能有一個涉及兩個Car對象的方法,但仍然希望它是靜態的。例如Car theMoreEfficientOf( Car c1, Car c2 )。雖然這可以轉換為非靜態版本,但有些人會認為,因為那里不是一個“特權”選擇,其中Car更重要,你不應該強迫調用者選擇一個Car作為你將調用方法的對象。這種情況只占所有靜態方法的一小部分,雖然。)


查看完整回答
反對 回復 2019-05-29
?
慕容森

TA貢獻1853條經驗 獲得超18個贊

僅在以下方案中定義靜態方法:

  1. 如果您正在編寫實用程序類,則不應更改它們。

  2. 如果方法未使用任何實例變量。

  3. 如果任何操作不依賴于實例創建。

  4. 如果有一些代碼可以被所有實例方法輕松共享,請將該代碼提取到靜態方法中。

  5. 如果您確定永遠不會更改或覆蓋方法的定義。由于靜態方法無法被覆蓋。


查看完整回答
反對 回復 2019-05-29
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

在閱讀了Misko的文章后,我認為從測試的角度看靜態方法是不好的。你應該有工廠(可能使用像Guice這樣的依賴注入工具)。

我怎樣才能確保我只有一件東西

只有一個東西“如何確保我只有一個東西”的問題很好地回避了。您只在main中實例化一個ApplicationFactory,因此,您只實例化所有單例的單個實例。

靜態方法的基本問題是它們是過程代碼

靜態方法的基本問題是它們是過程代碼。我不知道如何對程序代碼進行單元測試。單元測試假設我可以單獨實例化我的應用程序。在實例化期間,我使用mocks / friendlies連接依賴


查看完整回答
反對 回復 2019-05-29
  • 4 回答
  • 0 關注
  • 4200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號