1. 程式人生 > 實用技巧 >static之類方法和例項方法的區別

static之類方法和例項方法的區別

類體中的方法分為類方法和例項方法。

類方法

用static修飾的方法。

由於類方法是屬於整個類的,並不屬於類的哪兒個物件,所以類方法的方法體中不能有與類的物件有關的內容。即類方法體有如下限制:

1.類方法中不能引用物件變數;

2.類方法中不能呼叫類的物件方法;

3.在類方法中不能調使用super,this關鍵字;

4.類方法不能被覆蓋。

例項方法

當一個類建立了一個物件後,這個物件就可以呼叫該類的方法(物件方法)。

1.例項方法中可以引用物件變數,也可以引用類變數;

2.例項方法中可以呼叫類方法;

3.物件方法中可以使用super,this關鍵字。

區別

當類的位元組碼檔案被載入到記憶體時,類的例項方法不會被分配入口地址,當該類建立物件後,類中的例項方法才分配入口地址,從而例項方法可以被類建立的任何物件呼叫執行。需要注意的是,當我們建立第一個物件時,類中的例項方法就分配了入口地址,當再建立物件時,不再分配入口地址,也就是說,方法的入口地址被所有的物件共享,當所有的物件都不存在時,方法的入口地址才被取消。

對於類中的類方法,在該類被載入到記憶體時,就分配了相應的入口地址。從而類方法不僅可以被類建立的任何物件呼叫執行,也可以直接通過類名呼叫。類方法的入口地址直到程式退出時才被取消。

類方法在類的位元組碼載入到記憶體時就分配了入口地址。因此,Java語言允許通過類名直接呼叫類方法,而例項方法不能通過類名呼叫。在Java語言中,類中的類方法不可以操作例項變數,也不可以呼叫例項方法,這是因為在類建立物件之前,例項成員變數還沒有分配記憶體,而且例項方法也沒有入口地址。

class A

{int x,y;

static float f(int a,int b){}

float g(int x1,int
x2){} } class B {public static void main(String args[]) {A a1=new A(); A.f(2,3);//合法。 a1.f(2,4);//合法。 a1.g(2,5);//合法。 A.g(3,2);//非法。 } }