綁定定義
將方法調用與方法體關聯的過程稱為綁定。
- 早期綁定(靜態綁定):編譯/鏈接階段完成。C 语言所有調用皆為早期綁定。
- 後期綁定(動態綁定/運行期綁定):運行期根據對象實際類型完成。需運行期類型信息支持。
Java 的預設行為
Java 中所有非 final 方法默認後期綁定。無需開發者干預,自動發生。
這意味著:
- 編譯器不知對象實際類型也能編譯通過。
- 運行期 JVM 通過對象頭類型指針查找方法表決議調用。
- 實現多態的基石。
final 方法:關閉動態綁定
final 方法禁止覆寫 → 無多態可能 → 編譯器可安全執行早期綁定。
- 編譯器優化:內聯調用(用方法體直接替換調用點),省去壓棧、跳轉、返回開銷。
- 適用場景:極小、高頻調用、確不需覆寫的方法(如
getX())。
注意
方法體過大內聯反而膨脹代碼、降低指令緩存命中率。現代 JIT 編譯器會智能決策,開發者無需過度手動 final。private 方法隱式 final,同享優化。