靜態方法和例項方法

2021-04-29 08:30:56 字數 1045 閱讀 5047

靜態方法:

靜態方法是不屬於特定物件的方法,靜態方法可以訪問靜態成員變數,靜態方法不可以直接訪問例項變數,可以在例項函式呼叫的情況下,例項變數做為引數傳給靜態方法。靜態方法也不能直接呼叫例項方法,可以間接呼叫,首先要建立乙個類的例項,然後通過這一特定物件來呼叫靜態方法。

例項方法:

乙個例項方法的執行與特定物件關聯,他的執行需要乙個物件存在。例項方法可以直接訪問靜態變數和例項變數,例項方法可以直接訪問例項方法、和靜態方法,靜態方法的訪問方式為類名加點操作符加變數名。當多個例項物件存在時,記憶體中並不是存在某個特定的例項方法的拷貝,而是,相同類的所有物件都共享每個例項方法的乙個拷貝(例項方法只占用「一套」空間)。

常見的一些誤區 【摘自下面鏈結】

一、 靜態方法常駐記憶體,例項方法不是,所以靜態方法效率高但佔記憶體。

事實上,方法都是一樣的,在載入時機和占用記憶體上,靜態方法和例項方法是一樣的,在型別第一次被使用時載入。呼叫的速度基本上沒有差別。

二、 靜態方法在堆上分配記憶體,例項方法在堆疊上。

事實上所有的方法都不可能在堆或者堆疊上分配記憶體,方法作為**是被載入到特殊的**記憶體區域,這個記憶體區域是不可寫的。

三、 例項方法需要先建立例項才可以呼叫,比較麻煩,靜態方法不用,比較簡單。

事實上如果乙個方法與他所在型別的例項無關,那麼它就應該是靜態的,決不會有人把它寫成例項方法。所以所有的例項方法都與例項有關,既然與例項有關,那麼建立例項就是必然的步驟,沒有麻煩簡單一說。實際上上你可以把所有的例項方法都寫成靜態的,將例項作為引數傳入即可。

有些方法看似與所在的例項無關,如icomparer.compare方法,但實際上每乙個實現這個介面的類都只會負責自己型別例項的比較,這是c#1.x規範中沒有泛型所帶來的歷史遺留問題。

大部分靜態方法是與類的例項有關的,如各種parse方法,他做成靜態的原因是他沒有例項作為引數。其他的大多是出於語義或者其他目的的考慮。

出處:http://blog.csdn.net/chen_xizhang

06 靜態方法和例項方法

doctype html en utf 8 jquery的靜態方法和例項方法 title script 1 定義乙個類 function aclass 2 給這個類新增乙個例項方法 直接新增給類的就是靜態方法 aclass.staticmethod function 靜態方法通過類名呼叫 aclas...

js 靜態方法和例項方法

function f function.prototype.b function var f new f typeof f object typeof f function f.af.b function c 靜態方法 function test test.to function res test....

Python例項方法 靜態方法和類方法

和類屬性可細分為類屬性和例項屬性一樣,類中的方法也可以有更細緻的劃分,具體可分為類方法 例項方法和靜態方法,本節將詳細介紹這 3 種類方法的特點和用法。通常情況下,在類中定義的方法預設都是例項方法。前面章節中,我們已經定義了不只乙個例項方法。不僅如此,類的構造方法理論上也屬於例項方法,只不過它比較特...