靜態類和 關於什麼時候使用「靜態方法」

2021-08-14 16:48:27 字數 1280 閱讀 3342

我們知道,乙個類的方法從呼叫方式上可以分為「靜態方法」與「非靜態方法」(例項方法)。在.net框架中,也有很多這種公共靜態方法。現在我想討論一下,乙個類為什麼要提供靜態方法以及在什麼時候應該提供靜態方法。

靜態方法與非靜態方法最明顯的區別就是如果某個方法是公共靜態的,那麼可以直接通過類名.方法名的方法來呼叫,而公共例項方法則需要事先例項化物件,然後才能呼叫。很多人認為靜態方法來速度上、在記憶體占用比值上要比例項方法快和多,這一點我不認同。方法執行的快與慢在同等條件下主要決定於所要進行的操作,而靜態方法要比例項方法占用更多的記憶體這一點更是毫無根據。乙個型別載入的時候,該類的所有的方法都會被載入,不管是不是靜態的,所以如果你認為靜態方法要比例項方法占用更久的記憶體,這一點也是不對的。

乙個類為什麼會提供靜態方法呢?我們知道靜態的東西是與類相關的,非靜態的東西是與具體的類例項相關的。這兩者有什麼差別?差別在於「靜態方法」更通用,而「例項方法」是受限制的。為什麼這樣說?假設有乙個會員類,該類要有刪除會員的功能,那麼你可能最少也要提供兩上刪除方法,乙個是刪除當前例項所對應的會員,乙個是刪除指定的會員。前者是與具體例項相關的,後者則不與具體例項發生關係。問題就在這裡(為什麼要提供兩個刪除會員的方法)。你當然可以用這個刪除方法既刪除當前例項所對應的會員,也可以用這個方法刪除任一指的會員。可是如果從物件導向的設計方法上考慮,會員張三有權利去刪除會員李四嗎?你高興時可以將自己的筆記本送給別人,你能把我的筆記本送給別人嗎?當然不行,因為我的筆記本是我的,不是你的,你沒有權利這樣做。會員張三可以呼叫自己的刪除方法把自己刪除,而要刪除會員李四的時候,要不將會員李四例項化了後讓李四呼叫李四自己的刪除方法,要不,就由會員類來刪除會員李四,反正張三是不能把李四給刪除掉,在現實世界中,這是符合邏輯的。所以乙個類裡就有了與類相關的靜態方法,別認為靜態方法什麼速度快、呼叫方便就提供了靜態方法,不是這樣子的。

我的例子可能不是很合適,但我相信我要表達的意思已經很清楚了。在什麼時候要提供靜態方法,有這麼乙個原則(是我總結的),那就是如果某些操作不依賴具體例項,那它就是靜態的,反之如果某些操作是依賴具體例項的(例如訪問乙個特定會員的名稱),那它就應該是例項化的。

以上文字純屬個人見解,誤導不負責

靜態字段一旦賦值就要等到程式關閉才釋放......

靜態類是不能例項化的,我們直接使用它的屬性與方法,靜態類最大的特點就是共享。**

public static class statictestclass

} 只要 statictestclass 沒有被重新編譯,即使 p1.aspx、p2.aspx 被重新編譯,每當呼叫 statictestclass.add(),n 都會在前乙個次的基礎上加 1。原則

靜態建構函式

靜態類和 關於什麼時候使用「靜態方法」

我們知道,乙個類的方法從呼叫方式上可以分為 靜態方法 與 非靜態方法 例項方法 在.net框架中,也有很多這種公共靜態方法。現在我想討論一下,乙個類為什麼要提供靜態方法以及在什麼時候應該提供靜態方法。靜態方法與非靜態方法最明顯的區別就是如果某個方法是公共靜態的,那麼可以直接 通過類名.方法名的方法來...

什麼時候使用靜態?

1,靜態變數。當分析物件中所具備的成員變數的值都是相同的。這時這個成員就可以被靜態修飾。只要資料在物件中都是不同的,就是物件的特有資料,必須儲存在物件中,是非靜態的。如果是相同的資料。物件不需要做修改,只需要使用即可,不需要儲存在物件中,定義成靜態的。2,靜態函式。1 函式是否用靜態修飾,就參考一點...

什麼時候考慮使用靜態

這些各種說法,基本上都是正確的。但是,其中絕大多數是講了 靜態 和 例項 的區別,以及靜態方法的特徵。很少有說到何時或是為什麼要使用靜態的。靜態包括靜態類和靜態成員 靜態方法 和 靜態屬性 既然搜尋出來的這些說的都是靜態成員 基本上說的都是靜態方法 那麼我也就先僅對靜態方法談一談自己的看法。上中學數...