天天看點

java通路方法_JAVA方法調用過程(最詳細的解釋)

JAVA方法調用過程(最詳細的解釋)

釋出時間:2018-10-29 22:28,

浏覽次數:595

, 标簽:

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、調用方法

解說完成!!!!