方法綁定
方法的綁定分爲靜態綁定和動態綁定
- 靜態綁定:
靜態綁定(前期綁定,編譯綁定),類中哪些方法是靜態綁定的呢?
- private,私有方法
- super方法
- static方法
- 構造方法
靜態綁定的方法,在類上存儲方法指針,指針指向方法對象。
-
動態綁定:
動態綁定(後期綁定,運行時綁定),存在類型多態,只有運行的時候,才能確定最終的形態。
哪些是動態綁定呢?- 非私有方法
- 接口方法
-
方法重寫
子類重寫父類的方法,並且方法名稱、參數類型、參數個數都相同,叫做方法重寫,也正式Java的多態。
方法表
方法表,是類在加載的時候,在方法區生成的一個數組,裏面存儲類的方法的指針,指向方法對象。
- 優點:空間換時間,加快目標方法的查找時間。
- 子類繼承父類的方法:
如果,子類重寫類父類的方法,那麼子類方法表中指向的是子類的方法對象。
如果,子類沒有重寫父類的方法,那麼子類方法表中指向的是父類的方法對象。
jvm是怎麼識別方法的
jvm識別方法的關鍵在於「類名+方法名+方法描述」。備註:方法描述是參數類型和返回值類型。
怎麼調用方法
- 靜態綁定的方法是如何被找到的?
- 先找到類
- 然後,找到類中方法的指針,再去調用方法對象
- 動態方法是如何被找到的?
- 根據調用者的動態類型(棧的局部變量表中)
- 根據動態類型,找到方法區中的方法表
- 在方法表中,找到具體的指針,再去找到方法對象