Java對象方法的調(diào)用執(zhí)行過程詳解
對象方法的調(diào)用執(zhí)行過程
編譯器查看對象的聲明類型和方法名。假設(shè)調(diào)用x.f(param),隱式參數(shù)為x聲明為C類對象,需要注意的是,有可能存在多個方法名為f,但是參數(shù)不同的方法,此時,編譯器會一一列舉C類中的所有方法名為f的方法和超類中訪問屬性為public的并且名字為f的方法。
接下來,編譯器將查看調(diào)用方法時提供的參數(shù)類型。如果在所有名為f的方法中存在一個與提供的參數(shù)類型完全匹配,就選擇這個方法,這個過程叫做“重載解析”。
如果是private方法、static方法、final方法或者是構(gòu)造器,那么編譯器就可以準(zhǔn)確的知道應(yīng)該調(diào)用那個方法,我們將這種調(diào)用方式為靜態(tài)綁定,與此對應(yīng)的是,調(diào)用的方法依賴于隱式參數(shù)的實際類型,并且在運(yùn)行時實現(xiàn)動態(tài)綁定。比如,調(diào)用一個f(String)的方法。
當(dāng)程序運(yùn)行時,并且采用動態(tài)綁定調(diào)用方法,虛擬機(jī)一定調(diào)用與x所引用對象的類型最合適的那個類的方法。假設(shè),x的實際類型是D,他是C的子類,如果子類D中定義了f(String)方法,就直接調(diào)用它,否則就搜索C類中的方法,一次類推。
這樣調(diào)用方法的開銷十分的大,因此虛擬機(jī)為每個類都定義了一個方法表,其中列舉了所有的方法名和簽名,這樣,真正調(diào)用方法時,虛擬機(jī)就直接朝朝這個表就可以了。
調(diào)用方法的幾種方式
一般的,在Java語言中,調(diào)用方法有三種方式。
第一種
通過對象名.方法名進(jìn)行調(diào)用,這是最普通的也是最常見的一種調(diào)用方式。
第二種
通過new關(guān)鍵字調(diào)用構(gòu)造方法,這種是在實例化對象時使用的方式。
第三種
通過類名.方法名調(diào)用,當(dāng)需要調(diào)用的那個方法為靜態(tài)(有static的)方法時使用。配合實際操作,附如下例子:

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- java調(diào)用WebService服務(wù)的四種方法總結(jié)
- java反射調(diào)用方法NoSuchMethodException的解決方案
- Java多線程異步調(diào)用性能調(diào)優(yōu)方法詳解
- java異步調(diào)用的4種實現(xiàn)方法
- Java 帶參數(shù)與帶返回值的方法的定義和調(diào)用
- 詳解Java方法method的定義與調(diào)用及重載
- Java多線程run方法中直接調(diào)用service業(yè)務(wù)類應(yīng)注意的問題及解決
- Java方法調(diào)用解析靜態(tài)分派動態(tài)分派執(zhí)行過程
- 簡單解析java方法在調(diào)用在內(nèi)存中的執(zhí)行過程
相關(guān)文章
如何修改HttpServletRequest中header中的信息
這篇文章主要介紹了如何修改HttpServletRequest中header中的信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Springboot實現(xiàn)發(fā)送郵件及注冊激活步驟
為了方便郵件發(fā)送功能的使用,我們用郵件發(fā)送功能實現(xiàn)用戶注冊,實現(xiàn)步驟大概就是進(jìn)行用戶注冊同時發(fā)送一封激活郵件,郵件里附帶激活鏈接,關(guān)于Springboot發(fā)送郵件注冊激活功能的實現(xiàn)參考下本文吧2021-06-06
java system類使用方法示例 獲取系統(tǒng)信息
這篇文章主要介紹了java system類使用方法,該類中的方法都是靜態(tài)的。不能被實例化,沒有對外提供構(gòu)造函數(shù),該類可以獲取系統(tǒng)信息2014-01-01
Java反射機(jī)制詳解_動力節(jié)點Java學(xué)院整理
Java 反射機(jī)制。通俗來講呢,就是在運(yùn)行狀態(tài)中,我們可以根據(jù)“類的部分已經(jīng)的信息”來還原“類的全部的信息”。這篇文章給大家詳細(xì)介紹了java反射機(jī)制的知識,感興趣的朋友一起看看吧2017-06-06
使用EasyExcel實現(xiàn)百萬級別數(shù)據(jù)導(dǎo)出的代碼示例
近期需要開發(fā)一個將百萬數(shù)據(jù)量MySQL8的數(shù)據(jù)導(dǎo)出到excel的功能,所以本文講給大家介紹了基于EasyExcel實現(xiàn)百萬級別數(shù)據(jù)導(dǎo)出,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下2023-12-12
SpringBoot添加Email發(fā)送功能及常見異常詳解
本篇文章主要介紹了SpringBoot添加Email發(fā)送功能及常見異常詳解,具有一定的參考價值,有興趣的可以了解一下。2017-04-04
Java對象Serializable接口實現(xiàn)詳解
這篇文章主要介紹了Java對象Serializable接口實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12
Spring報錯:Error creating bean with name的問
這篇文章主要介紹了Spring報錯:Error creating bean with name的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08

