Java中類的方法分為類方法(用static修飾,也叫靜態(tài)方法)和實(shí)例方法(沒有用static修飾,也叫非靜態(tài)方法),這兩種方法之間有什么區(qū)別呢?
一.實(shí)例方法
當(dāng)類的字節(jié)碼文件加載到內(nèi)存中時(shí),類的實(shí)例方法并沒有被分配入口地址,只有當(dāng)該類的對(duì)象創(chuàng)建以后,實(shí)例方法才分配了入口地址。從而實(shí)例方法可以被類創(chuàng)建的所有對(duì)象調(diào)用,還有一點(diǎn)需要注意,當(dāng)我們創(chuàng)建第一個(gè)類的對(duì)象時(shí),實(shí)例方法的入口地址會(huì)完成分配,當(dāng)后續(xù)在創(chuàng)建對(duì)象時(shí),不會(huì)再分配新的入口地址,也可以說,該類的所有對(duì)象共享實(shí)例方法的入口地址,當(dāng)該類的所有對(duì)象被銷毀,入口地址才會(huì)消失。
二.類方法
當(dāng)類的字節(jié)碼文件加載到內(nèi)存,類方法的入口地址就會(huì)分配完成,所以類方法不僅可以被該類的對(duì)象調(diào)用,也可以直接通過類名完成調(diào)用。類方法的入口地址只有程序退出時(shí)消失。
因?yàn)轭惙椒ǖ娜肟诘刂返姆峙湟缬趯?shí)例方法的入口地址分配時(shí)間,所有在定義類方法和實(shí)例方法是有以下規(guī)則需要遵循:
1.在類方法中不能引用實(shí)例變量
實(shí)例變量的定義類似實(shí)例方法,沒有用static修飾的變量,實(shí)例變量的創(chuàng)建與實(shí)例方法的創(chuàng)建相同,也是在類的對(duì)象創(chuàng)建時(shí)完成,所以在類方法中是不能引用實(shí)例變量的,因?yàn)檫@個(gè)時(shí)候?qū)嵗兞窟€沒有分配內(nèi)存地址。
2.在類方法中不能使用super和this關(guān)鍵字
這是因?yàn)閟uper和this都指向的是父類和本類的對(duì)象,而在類方法中調(diào)用的時(shí)候,這些指代的對(duì)象有可能都還沒有創(chuàng)建。
3.類方法中不能調(diào)用實(shí)例方法
原因同1。
與類方法相比,實(shí)例方法的定義就沒有什么限制了:
【1】實(shí)例方法可以引用類變量和實(shí)例變量
【2】實(shí)例方法可以使用super和this關(guān)鍵字
【3】實(shí)例方法中可以調(diào)用類方法
以上就是長(zhǎng)沙中公優(yōu)就業(yè)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):java類方法定義”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
Java基礎(chǔ)學(xué)習(xí)