C#中靜態類和非靜態類的定義基本相同,只是靜態類定義需要添加壹個靜態修飾符。
二、生命周期:
像靜態成員變量壹樣,靜態方法屬於類本身。當類被加載時,它被加載到內存中,並將壹直保留在內存中,直到JVM關閉。
非靜態方法也叫實例化方法,屬於實例對象,實例化後會分配內存,所以必須被類的實例引用。沒有內存駐留,當實例對象被JVM回收時,就會消失。
第三,效率:
靜態方法比非靜態方法更有效。
按照上面的概念,只要有足夠的內存,就可以使用靜態。
第四,線程安全:
靜態方法是* * *共享代碼段,靜態變量是* * *共享數據段。既然是“* * *”,就有個競合的問題。
非靜態方法是針對某個對象的,所以不會有線程安全問題。
靜態方法與實例方法相同,並且在第壹次使用類型時加載。通話速度基本沒有區別。
動詞 (verb的縮寫)靜態成員和非靜態成員的比較:
1.靜態成員屬於類,非靜態成員屬於類的實例。
2.每次創建壹個類的實例,都會在內存中為非靜態成員分配壹塊新的存儲空間;非靜態成員屬於類,並為每個類的實例所共有。無論該類創建了多少個實例,該類的靜態成員都只在內存中占據相同的區域。
六、用途不同:
1.靜態方法屬於類,可以在實例化類之前使用。
2.非靜態方法可以訪問類中的任何成員,而靜態方法只能訪問類中的靜態成員。
3.因為靜態方法可以在類被實例化之前使用,而類中的非靜態變量必須被實例化之後才能分配內存,所以只有靜態變量和其他靜態方法才能出現在static裏面!此外,像這樣的關鍵詞...不能在靜態方法中使用...因為是全班的!
4.靜態方法比實例化更有效。靜態方法的缺點是不自動銷毀,而實例化可以銷毀。
5.靜態方法和靜態變量在創建後總是使用同壹個內存,而使用實例會創建多個內存。