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作為你將調用方法的對象。這種情況只占所有靜態方法的一小部分,雖然。)

慕容森
TA貢獻1853條經驗 獲得超18個贊
僅在以下方案中定義靜態方法:
如果您正在編寫實用程序類,則不應更改它們。
如果方法未使用任何實例變量。
如果任何操作不依賴于實例創建。
如果有一些代碼可以被所有實例方法輕松共享,請將該代碼提取到靜態方法中。
如果您確定永遠不會更改或覆蓋方法的定義。由于靜態方法無法被覆蓋。
添加回答
舉報
0/150
提交
取消