1. 程式人生 > >JAVA方法執行過程(最詳細的解釋)

JAVA方法執行過程(最詳細的解釋)

弄清楚方法的呼叫過程,對於我們學習java極為重要,下面是呼叫過程的詳細描述:

1、編譯器檢視物件的宣告型別和方法名。

編譯器去尋找所有名字為f但引數型別不同的方法。例如可能存在方法f(int)和方法f(String),編譯器會一 一列出所有當前類中所有名為f的方法,和其超類中訪問屬性為public且名為f的方法(超類中的私有方法不可訪問)

2、編譯器將檢視呼叫方法是提供方的引數型別。

如果在所有名為f的方法中,有與所提供的引數完全匹配的方法,則選擇這個方法,這個過程稱為“過載匹配”。例如對於呼叫f("Hello"),編譯器就會選擇並呼叫f(String)方法,而不會呼叫f(int)。另外由於允許型別轉換(例如int可以轉換為double),因此如果編譯器沒有找到與引數型別匹配的方法,或者找到型別轉換後有多個方法與之匹配,就會報錯。

3、如果是private、static、final方法或者構造器,編譯器會準確的知道應該呼叫那個方法,這種呼叫方式成為靜態繫結,與此對應的是,呼叫方法依賴於隱式引數的實際型別,並且在執行時實現動態繫結。

4、當程式執行時,並且採用動態繫結的呼叫方法時,虛擬機器一定會呼叫與x所引用的物件的實際型別最合適的那個類的方法。例如,假設x的實際型別時D,它是C的子類。如果D類定義了方法f(String),則直接呼叫它,否則去D的超類中去尋找方法。

 

舉個實際例子:

OB解說一波,e.getSalary()方法的解析過程

1、虛擬機器提取e實際型別的的方法表

2、虛擬機器搜尋定義getSalary的簽名的類

3、掉用方法

 


解說完成!!!!