Java類方法和實例方法的區別


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

類方法

用static修飾的方法。

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

1.類方法中不能引用對象變量;

2.類方法中不能調用類的對象方法;

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

4.類方法不能被覆蓋。

實例方法

當一個類創建了一個對象后,這個對象就可以調用該類的方法(對象方法)。

1.實例方法中可以引用對象變量,也可以引用類變量;

2.實例方法中可以調用類方法;

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

區別

當類的字節碼文件被加載到內存時,類的實例方法不會被分配入口地址,當該類創建對象后,類中的實例方法才分配入口地址,從而實例方法可以被類創建的任何對象調用執行。需要注意的是,當我們創建第一個對象時,類中的實例方法就分配了入口地址,當再創建對象時,不再分配入口地址,也就是說,方法的入口地址被所有的對象共享,當所有的對象都不存在時,方法的入口地址才被取消。

對於類中的類方法,在該類被加載到內存時,就分配了相應的入口地址。從而類方法不僅可以被類創建的任何對象調用執行,也可以直接通過類名調用。類方法的入口地址直到程序退出時才被取消。

類方法在類的字節碼加載到內存時就分配了入口地址。因此,Java語言允許通過類名直接調用類方法,而實例方法不能通過類名調用。在Java語言中,類中的類方法不可以操作實例變量,也不可以調用實例方法,這是因為在類創建對象之前,實例成員變量還沒有分配內存,而且實例方法也沒有入口地址。

class A

{int x,y;

static float f(int a){}

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);//非法。

}

}

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM