靜態方法與非靜態方法的區別

2021-07-13 20:46:38 字數 1666 閱讀 7910

使用static修飾的靜態方法是屬於整個類的類方法,它在記憶體中的**段會隨類的定義而被分配和裝載;而非靜態方法是屬於具體物件的方法,當這個對 象建立時,在物件的記憶體中會擁有此方法的專用**段。

在引用靜態方法時,可以使用物件名加字首,也可以使用類名加字首

。eg. classa 例項化了乙個物件objecta,

classa中定義了乙個靜態方法:run( ). 則可使用 classa.run( ) 或者objecta.run( )來執行。

非靜態方法既可以訪問靜態資料成員 又可以訪問非靜態資料成員,而靜態方法只能訪問靜態資料成員;同樣地非靜態方法既可以訪問靜態方法又可以訪問非靜態方法,而靜態方法只能訪問靜態資料方法。特別注意的是靜態方法中的main方法,它作為程式執行的入口點,在每個程式中有且只能有乙個。

例如:public class person 

public int birthday(int x)

public static void main(string args) }

編譯時,就會出現無法從靜態上下文中引用非靜態變數age和非靜態方法birthday(int)的錯誤。

還有一點就是靜態方法不能被覆蓋,有乙個形象的例子引自

首先我們提供兩個類,基類為parent,派生類為child。在parent中我們提供兩個方法,乙個是靜態方法staticmethod(),乙個是非靜態方法nonstaticmethod()。在child類中我們覆蓋著兩個方法。

class parent  

public static void staticmethod()

} class child extends parent

public static void staticmethod()

} 在test類中我們分別使用parent p1 = new parent(),parent p2 = new child(),child c = new child()得到三個例項,並分別呼叫靜態方法和非靜態方法,我們來看程式的執行結果

public class test

} 程式的執行結果為:

parent.static: parent's static method is called

p1.static: parent's static method is called

p2.static: parent's static method is called

p1.nonstatic: parent's non-static method is called

p2.nonstatic: child's non-static method is called

child.static: child's static method is called

c.static: child's static method is called

c.nonstatic: child's non-static method is called

值得注重的是p2實際上是乙個child的型別的引用,然而在呼叫靜態方法的時候,它執行的卻是父類的靜態方法,而不是child的靜態方法,而呼叫 p2的非靜態方法的時候執行的是child的非靜態方法,為什麼呢?原因是靜態方法是在編譯的時候把靜態方法和類的引用型別進行匹配,而不是在執行的時候 和類引用進行匹配。因此我們得出結論:當我們在子類中建立的靜態方法,它並不會覆蓋父類中相同名字的靜態方法。

靜態方法與非靜態方法區別

c 靜態方法與非靜態方法的區別不僅僅是概念上的,那麼他們有什麼具體的區別呢?讓我們通過本文向你做一下解析。c 的類中可以包含兩種方法 c 靜態方法與非靜態方法。那麼他們的定義有什麼不同呢?他們在使用上會有什麼不同呢?讓我們來看看最直觀的差別 使用了static 修飾符的方法為靜態方法,反之則是非靜態...

靜態方法與非靜態方法的區別

使用static修飾的靜態方法是屬於整個類的類方法,它在記憶體中的 段會隨類的定義而被分配和裝載 而非靜態方法是屬於具體物件的方法,當這個對 象建立時,在物件的記憶體中會擁有此方法的專用 段。在引用靜態方法時,可以使用物件名加字首,也可以使用類名加字首 eg.classa 例項化了乙個物件objec...

C 靜態方法與非靜態方法的區別

c 的類中可以包含兩種方法 c 靜態方法與非靜態方法。那麼他們的定義有什麼不同呢?他們在使用上會有什麼不同呢?讓我們來看看最直觀的差別 使用了static 修飾符的方法為靜態方法,反之則是非靜態方法。下面我們分四個方面來看看c 靜態方法與非靜態方法的差異 c 靜態方法與非靜態方法比較一 c 靜態成員...