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