動態方法/實例方法
1).標識符:— 類開頭
2).調用方式:(實例對象? ? 函數)
3).實例方法在堆棧上。
靜態方法/類方法
1).標識符:+ 類開頭
2).調用方式:(類? ? 函數)
3).靜態方法在堆上分配內存。
靜態方法和實例方法的區分
1).靜態方法常駐內存,實例方法不是,所以靜態方法效率高但占內存。事實上,方法都是一樣的,在加載時機和占用內存上,靜態方法和實例方法是一樣的,在類型第一次被使用時加載。調用的速度基本上沒有差別。
2).靜態方法在堆上分配內存,實例方法在堆棧上。事實上所有的方法都不可能在堆或者堆棧上分配內存,方法作為代碼是被加載到特殊的代碼內存區域,這個區域是不可寫的。
3).實例方法需要先創建實例才可以調用,比較麻煩,靜態方法不用,比較簡單。
4).靜態方法是靜態綁定到子類,不是被繼承。
5).一般使用頻繁的方法用靜態方法,用的少的方法用動態的。靜態的速度快,占內存。動態的速度相對慢些,但調用完后,立即釋放類,可以節省內存,可以根據自己的需要選擇是用動態方法還是靜態方法。
6).靜態方法修改的是類的狀態,而對象修改的是各個對象的狀態。
7).類的實例調用是在類的生命周期中存在,當類沒有了以后,對應的實例也就沒有了,對應的方法也就沒有了。靜態類不然,只要你引用了那個靜態類的命名空間,它就會一直存在,直到我們推出系統。
使用場景
1.如果需要訪問或者修改某個實例的成員變量時,將該方法定義成實例方法。
2.類方法正好相反,它不需要訪問或者修改某個實例的成員變量。
3.類方法一般用于實現一些工具方法,比如對某個對象進行擴展,或者實現單例。