- 如果某些操作不依賴具體實例,那它就是靜態的,反之如果某些操作是依賴具體實例的(例如訪問一個特定會員的名稱),那它就應該是實例化的。
- 靜態方法不用new對象可以直接調用
-
1.與類相關與對象無關
2.不需要對象的“輕”方法
3.工廠方法 -
如果某個方法是用頻率較高,或者方法本身通用性較強,無需初始化類成員變量,則可以使用靜態方法,那樣方便,速度也快.
-
可以直接拿來就用的方法,就算是靜態的.
-
肯定不涉及具體對象,因為靜態方法內,是無法直接使用任何非靜態成員的。
-
(1)制作工具類
(2)可以當作"作局"對象或方法來使用 -
靜態方法和實例方法是一樣的,在類型第一次被使用時加載。調用的速度基本上沒有差別。
-
靜態方法不用創建實例就可調用,比較簡單從面向對象的角度上來說,在抉擇使用實例化方法或靜態方法時,應該根據是否該方法和實例化對象具有邏輯上的相關性,如果是就應該使用實例化對象 反之使用靜態方法
-
不需要生成對象的
經常頻繁使用的
工具類里的(如SqlHelper) -
適當地使用static方法本身並沒有什么,當一個人從來不懂使用多態、接口設計時,很自然地會濫用static方法。
-
個人理解在多個類中需要調用並且是與對象無關的方法可設為靜態方法,方便調用。
-
所有對象共有的方法
-
再不關系到任何於特定對象相關的操作
比如學生的年齡就是學生的相關。
修改學生的年齡就不適合用靜態方法。
一般來說,如果你的方法里沒有用到this關鍵字,
那就適合用靜態方法 -
通常通用的類中一些常用的方法可以設計為靜態類
-
只要是沒有用到類的狀態信息,只從參數獲取信息的都可以為靜態的
-
可以實現某些特殊的設計模式:如Singleton
-
由於沒有this指針,可以把某些系統API的回調函數以靜態函數的形式封裝到類的內部
-
可以封裝某些算法,比如數學函數,如ln,sin,tan等等,這些函數本就沒必要屬於任何一個對象,所以從類上調用感覺更好
-
總之,從OOA/OOD的角度考慮,一切不需要實例化就可以有確定行為方式的函數都應該設計成靜態的
-
靜態方法與非靜態方法最明顯的區別就是如果某個方法是公共靜態的,那么可以直接通過類名.方法名的方法來調用,而公共實例方法則需要事先實例化對象,然后才能調用。
這些各種說法,基本上都是正確的。
歡迎關注公眾號"Devin說",會不定期更新技術知識。
