更新時間:2020-04-26 14:27:42 來源:動力節(jié)點 瀏覽3015次
Java中類的方法分為類方法(用static修飾,也叫靜態(tài)方法)和實例方法(沒有用static修飾,也叫非靜態(tài)方法),這兩種方法之間有什么區(qū)別呢?
一.實例方法
當(dāng)類的字節(jié)碼文件加載到內(nèi)存中時,類的實例方法并沒有被分配入口地址,只有當(dāng)該類的對象創(chuàng)建以后,實例方法才分配了入口地址。從而實例方法可以被類創(chuàng)建的所有對象調(diào)用,還有一點需要注意,當(dāng)我們創(chuàng)建第一個類的對象時,實例方法的入口地址會完成分配,當(dāng)后續(xù)在創(chuàng)建對象時,不會再分配新的入口地址,也可以說,該類的所有對象共享實例方法的入口地址,當(dāng)該類的所有對象被銷毀,入口地址才會消失。
二.類方法
當(dāng)類的字節(jié)碼文件加載到內(nèi)存,類方法的入口地址就會分配完成,所以類方法不僅可以被該類的對象調(diào)用,也可以直接通過類名完成調(diào)用。類方法的入口地址只有程序退出時消失。
因為類方法的入口地址的分配要早于實例方法的入口地址分配時間,所有在定義類方法和實例方法是有以下規(guī)則需要遵循:
1.在類方法中不能引用實例變量
實例變量的定義類似實例方法,沒有用static修飾的變量,實例變量的創(chuàng)建與實例方法的創(chuàng)建相同,也是在類的對象創(chuàng)建時完成,所以在類方法中是不能引用實例變量的,因為這個時候?qū)嵗兞窟€沒有分配內(nèi)存地址。
2.在類方法中不能使用super和this關(guān)鍵字
這是因為super和this都指向的是父類和本類的對象,而在類方法中調(diào)用的時候,這些指代的對象有可能都還沒有創(chuàng)建。
3.類方法中不能調(diào)用實例方法
原因同1。
與類方法相比,實例方法的定義就沒有什么限制了:
【1】實例方法可以引用類變量和實例變量
【2】實例方法可以使用super和this關(guān)鍵字
【3】實例方法中可以調(diào)用類方法
以上就是動力節(jié)點java培訓(xùn)機(jī)構(gòu)的小編針對“Java基礎(chǔ)學(xué)習(xí):java類方法定義”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743