您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java對象方法調(diào)用執(zhí)行過程是怎樣的”,在日常操作中,相信很多人在Java對象方法調(diào)用執(zhí)行過程是怎樣的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java對象方法調(diào)用執(zhí)行過程是怎樣的”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
編譯器查看對象的聲明類型和方法名。假設(shè)調(diào)用x.f(param),隱式參數(shù)為x聲明為C類對象,需要注意的是,有可能存在多個(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)綁定,與此對應(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所引用對象的類型最合適的那個(gè)類的方法。假設(shè),x的實(shí)際類型是D,他是C的子類,如果子類D中定義了f(String)方法,就直接調(diào)用它,否則就搜索C類中的方法,一次類推。
這樣調(diào)用方法的開銷十分的大,因此虛擬機(jī)為每個(gè)類都定義了一個(gè)方法表,其中列舉了所有的方法名和簽名,這樣,真正調(diào)用方法時(shí),虛擬機(jī)就直接朝朝這個(gè)表就可以了。
一般的,在Java語言中,調(diào)用方法有三種方式。
通過對象名.方法名進(jìn)行調(diào)用,這是最普通的也是最常見的一種調(diào)用方式。
通過new關(guān)鍵字調(diào)用構(gòu)造方法,這種是在實(shí)例化對象時(shí)使用的方式。
通過類名.方法名調(diào)用,當(dāng)需要調(diào)用的那個(gè)方法為靜態(tài)(有static的)方法時(shí)使用。配合實(shí)際操作,附如下例子:
到此,關(guān)于“Java對象方法調(diào)用執(zhí)行過程是怎樣的”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。