詳見:
1、大家都以為「例項方法需要先建立例項才可以呼叫,比較麻煩,靜態方法不用,比較簡單」
事實上如果乙個方法與他所在類的例項物件無關,那麼它就應該是靜態的,而不應該把它寫成例項方法。所以所有的例項方法都與例項有關,既然與例項有關,那麼建立例項就是必然的步驟,沒有麻煩簡單一說。 當然你完全可以把所有的例項方法都寫成靜態的,將例項作為引數傳入即可,一般情況下可能不會出什麼問題。
從物件導向的角度上來說,在抉擇使用例項化方法或靜態方法時,應該根據是否該方法和例項化物件具有邏輯上的相關性,如果是就應該使用例項化物件 反之使用靜態方法。這只是從物件導向角度上來說的。 如果從執行緒安全、效能、相容性上來看 也是選用例項化方法為宜。
2、大家都以為「 靜態方法常駐記憶體,例項方法不是,所以靜態方法效率高但佔記憶體。」
事實上,他們都是一樣的,在載入時機和占用記憶體上,靜態方法和例項方法是一樣的,在型別第一次被使用時載入。呼叫的速度基本上沒有差別。
3、大家都以為「 靜態方法在堆上分配記憶體,例項方法在堆疊上」
事實上所有的方法都不可能在堆或者堆疊上分配記憶體,方法作為**是被載入到特殊的**記憶體區域,這個記憶體區域是不可寫的。
方法佔不占用更多記憶體,和它是不是static沒什麼關係。
因為欄位是用來儲存每個例項物件的資訊的,所以欄位會占有記憶體,並且因為每個例項物件的狀態都不一致(至少不能認為它們是一致的),所以每個例項物件的所以欄位都會在記憶體中有一分拷貝,也因為這樣你才能用它們來區分你現在操作的是哪個物件。
但方法不一樣,不論有多少個例項物件,它的方法的**都是一樣的,所以只要有乙份**就夠了。因此無論是static還是non-static的方法,都只存在乙份**,也就是只占用乙份記憶體空間。
同樣的**,為什麼執行起來表現卻不一樣?這就依賴於方法所用的資料了。主要有兩種資料**,一種就是通過方法的引數傳進來,另一種就是使用class的成員變數的值……
java 靜態方法分析
詳見 1 大家都以為 例項方法需要先建立例項才可以呼叫,比較麻煩,靜態方法不用,比較簡單 事實上如果乙個方法與他所在類的例項物件無關,那麼它就應該是靜態的,而不應該把它寫成例項方法。所以所有的例項方法都與例項有關,既然與例項有關,那麼建立例項就是必然的步驟,沒有麻煩簡單一說。當然你完全可以把所有的例...
java 靜態方法
方法宣告與呼叫 1.方法宣告 修飾符 返回值型別 方法 引數列表 2.方法呼叫 方法 引數列表 3.宣告main方法 public static void main string args 引數傳遞 方法呼叫時的引數傳遞原則 基本資料型別引數傳遞值 引用資料型別引數傳遞引用。程式設計講解 編寫兩個靜...
Java 靜態方法
類方法就是靜態方法。其它的就是例項方法 例項方法可以對當前物件的例項變數進行操作,也可以對類變數進行操作,但類方法不能訪問例項變數。例項方法必須由例項物件來呼叫,而類方法除了可由例項物件呼叫外,還可以由類名直接呼叫。另外,在類方法中不能使用 this 或 super。關於類方法的使用,有如下一些限制...