一、定義
- 方法:通俗點講壕鹉,表示一種行為的描述担扑,一個問題的解決過程
- 實例方法:沒有使用static修飾,定義在類內部的方法
- 靜態(tài)方法:使用static修飾劫笙,定義在類內部的方法
二芙扎、區(qū)別
- 不同點:
1)關鍵字不同:有無static
2)使用方式不同:靜態(tài)方法可以直接使用,Class.method填大,也可以實例化后再調用戒洼,實例方法必須要實例化才能調用
3)變量使用不同:靜態(tài)方法不能直接使用成員變量,可以直接使用靜態(tài)變量允华,實例方法可以使用靜態(tài)變量和成員變量
三圈浇、小結
靜態(tài)方法屬于類層面,實例方法屬于實例層面靴寂,類層面大于實例層面磷蜀,實例方法可以獲取類層面的變量,因為在類加載的時候百炬,變量已經加載到內存
四褐隆、使用場景
- 與類關系:靜態(tài)方法一般和類沒有直接關系,比如剖踊,工具類使用靜態(tài)方法庶弃,實例方法一般和類有直接關系。萬物存在即合理德澈,兩者之間的關系都是相對的歇攻,要聯(lián)系兩者,總有理由將它們扯在一起梆造,既然靜態(tài)方法還是寫在一個類中缴守,那它和類其實還是有關系的,如果放開這個理由,簡單的單例模式斧散,難道靜態(tài)方法和類就沒有關系了嗎供常?只是實例方法和類直接的關系更加緊密而已
- 效率:實例方法需要實例化對象,才能調用方法鸡捐,靜態(tài)方法可以直接調用栈暇,少了實例化對象所需時間,效率更高些
- 線程安全:靜態(tài)方法內部使用的靜態(tài)變量無法保證線程安全箍镜,這個靜態(tài)變量是一個線程共享源祈,實例方法使用的成員變量屬于當前對象,不將該對象共享出去色迂,是一個線程安全的(哈哈)