Java對(duì)象方法的調(diào)用執(zhí)行過程詳解
對(duì)象方法的調(diào)用執(zhí)行過程
編譯器查看對(duì)象的聲明類型和方法名。假設(shè)調(diào)用x.f(param),隱式參數(shù)為x聲明為C類對(duì)象,需要注意的是,有可能存在多個(gè)方法名為f,但是參數(shù)不同的方法,此時(shí),編譯器會(huì)一一列舉C類中的所有方法名為f的方法和超類中訪問屬性為public的并且名字為f的方法。
接下來,編譯器將查看調(diào)用方法時(shí)提供的參數(shù)類型。如果在所有名為f的方法中存在一個(gè)與提供的參數(shù)類型完全匹配,就選擇這個(gè)方法,這個(gè)過程叫做“重載解析”。
如果是private方法、static方法、final方法或者是構(gòu)造器,那么編譯器就可以準(zhǔn)確的知道應(yīng)該調(diào)用那個(gè)方法,我們將這種調(diào)用方式為靜態(tài)綁定,與此對(duì)應(yīng)的是,調(diào)用的方法依賴于隱式參數(shù)的實(shí)際類型,并且在運(yùn)行時(shí)實(shí)現(xiàn)動(dòng)態(tài)綁定。比如,調(diào)用一個(gè)f(String)的方法。
當(dāng)程序運(yùn)行時(shí),并且采用動(dòng)態(tài)綁定調(diào)用方法,虛擬機(jī)一定調(diào)用與x所引用對(duì)象的類型最合適的那個(gè)類的方法。假設(shè),x的實(shí)際類型是D,他是C的子類,如果子類D中定義了f(String)方法,就直接調(diào)用它,否則就搜索C類中的方法,一次類推。
這樣調(diào)用方法的開銷十分的大,因此虛擬機(jī)為每個(gè)類都定義了一個(gè)方法表,其中列舉了所有的方法名和簽名,這樣,真正調(diào)用方法時(shí),虛擬機(jī)就直接朝朝這個(gè)表就可以了。
調(diào)用方法的幾種方式
一般的,在Java語言中,調(diào)用方法有三種方式。
第一種
通過對(duì)象名.方法名進(jìn)行調(diào)用,這是最普通的也是最常見的一種調(diào)用方式。
第二種
通過new關(guān)鍵字調(diào)用構(gòu)造方法,這種是在實(shí)例化對(duì)象時(shí)使用的方式。
第三種
通過類名.方法名調(diào)用,當(dāng)需要調(diào)用的那個(gè)方法為靜態(tài)(有static的)方法時(shí)使用。配合實(shí)際操作,附如下例子:
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- java調(diào)用WebService服務(wù)的四種方法總結(jié)
- java反射調(diào)用方法NoSuchMethodException的解決方案
- Java多線程異步調(diào)用性能調(diào)優(yōu)方法詳解
- java異步調(diào)用的4種實(shí)現(xiàn)方法
- Java 帶參數(shù)與帶返回值的方法的定義和調(diào)用
- 詳解Java方法method的定義與調(diào)用及重載
- Java多線程run方法中直接調(diào)用service業(yè)務(wù)類應(yīng)注意的問題及解決
- Java方法調(diào)用解析靜態(tài)分派動(dòng)態(tài)分派執(zhí)行過程
- 簡單解析java方法在調(diào)用在內(nèi)存中的執(zhí)行過程
相關(guān)文章
Mybatis中的游標(biāo)查詢Cursor(滾動(dòng)查詢)
這篇文章主要介紹了Mybatis中的游標(biāo)查詢Cursor(滾動(dòng)查詢),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01SpringBoot 多任務(wù)并行+線程池處理的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot 多任務(wù)并行+線程池處理的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04Java的編譯時(shí)錯(cuò)誤和運(yùn)行時(shí)錯(cuò)誤問題
這篇文章主要介紹了Java的編譯時(shí)錯(cuò)誤和運(yùn)行時(shí)錯(cuò)誤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04idea在用Mybatis時(shí)xml文件sql不提示解決辦法(提示后背景顏色去除)
mybatis的xml文件配置的時(shí)候,有時(shí)候會(huì)沒有提示,這讓我們很頭疼,下面這篇文章主要給大家介紹了關(guān)于idea在用Mybatis時(shí)xml文件sql不提示的解決辦法,提示后背景顏色去除的相關(guān)資料,需要的朋友可以參考下2023-03-03SpringBoot中jar啟動(dòng)下如何讀取文件路徑
這篇文章主要介紹了SpringBoot?jar啟動(dòng)下如何讀取文件路徑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06SpringBoot讀取多環(huán)境配置文件的幾種方式
這篇文章主要給大家介紹了SpringBoot讀取多環(huán)境配置文件的幾種方式,文章通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-10-10