如果我知道一個特定的類只會在我的程序中實例化一次,那麼最好是使用靜態方法和變量來代替那個特定的類嗎?如果不是,如果只有一個該類的實例,那麼使用實例方法和變量優於靜態方法會帶來什麼好處?Java - 只有一個類的實例:使用靜態方法?
2
A
回答
3
4
這取決於你需要班級做什麼以及將來可能需要什麼。這也取決於有多少人會看到或使用此代碼。如果這個代碼只會被你看到和使用,比選擇一個實現並且一直跟隨它,那麼迫使你自己切換到另一個實現,因爲練習可能是照亮的。
假設你的代碼會被看到或另一個程序員使用:
如果對象是,你需要在測試中模仿(如數據庫連接,例如)的東西,然後它會是最好能有你的方法是實例方法,並找到一些其他的策略來確保你只有一個。 (例如,你的類將你的程序的輸出寫入excel文件),然後將你的類的實例傳遞給任何需要它們的方法一個很好的方法可以幫助你的代碼更加靈活(例如,如果你以後決定要生成html輸出,你所要做的就是編寫一個你的excel編寫器的姊妹實現,然後通過它)。
如果您幾乎100%確定您的代碼永遠不需要被模仿(又名「模擬」),並且您永遠不需要利用多態性(例如Java中的Math類),那麼靜態方法將可能會很好,但這是一個罕見的情況。
相關問題
- 1. 只調用一個實例的類的靜態方法
- 2. 只有公共靜態方法與實例化類的類
- 3. PHP:調用一個實例的靜態類中實例的私有方法
- 4. Java - 使用該類實例引用靜態方法
- 5. Java - 從靜態方法使用實例類?
- 6. 類實例調用靜態方法
- 7. 靜態方法的Java實例變量
- 8. Java:在靜態方法中從超類創建一個子類的實例
- 9. C#類實例的靜態方法VS靜態類的內存使用情況
- 10. Java靜態/實例方法優化
- 11. 使用基類的靜態方法實例化一個繼承類
- 12. 通用靜態類有多個實例?
- 13. 從靜態方法實例化子類
- 14. 靜態方法vs靜態實例
- 15. 有沒有辦法讓靜態方法訪問一個類的所有非靜態實例?
- 16. 只有靜態方法的類模塊
- 17. 創建一個類的靜態實例
- 18. 從另一個類從靜態方法訪問實例變量
- 19. 如何在Java上的類實例上抑制靜態方法?
- 20. Java - 將調用靜態方法調用所有實例上的方法嗎?
- 21. 將靜態方法放入靜態類並將實例方法放入靜態類中有什麼區別?
- 22. SharePoint TimerJob:在類/靜態方法的實例中使用SPListItem.Update()
- 23. Java:喜歡實用類取決於類實例或靜態方法?
- 24. 需要在靜態和非靜態方法中使用實例
- 25. 在java中的靜態方法vs實例方法的決定?
- 26. 從靜態方法調用所有實例的接口方法
- 27. 靜態方法可能只對一類
- 28. Mongoose'靜態'方法與'實例'方法
- 29. 靜態方法和實例方法C#
- 30. Python:使用類方法作爲靜態,當它實現爲實例方法
你*可以*使它成爲'enum'。但爲什麼**限制自己?如果你需要兩個實例,或者三個呢? –
如果你真的知道它會是一個實例,那麼你應該使用(Singleton)模式 –
這個問題可能是有用的:https://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton- pattern?noredirect = 1&lq = 1 –