重載解析、靜態綁定、動態綁定

程序運行時,jvm會根據用到的類名去找對應的.class文件,如果類發生了改變或者.class不存在,會進行編譯。

X x  = new X();

x.f(int ss)

執行到new這行代碼,會查找X匹配的.class,然後查找X類,包括其超類中所有叫f的方法(叫f的方法可能重載了很多),鎖定要執行的方法的範圍。然後根據參數去匹配,這個叫重載解析

這個過程中,如果方法是private   ,static,final,或者構造器,這些明確是屬於類自身的,可以快速找到調用位置,這叫靜態綁定

如果不是,那麼會去找跟x 對象類型最匹配的類的方法,比如自身有定義,或者重寫,就調用自身的,否則,去父類查找,如果沒有,繼續以此類推。這叫動態綁定。

動態綁定每次都要找,開銷比較大,jvm爲類預設了 method table方法表,每次去mehtod table去找就行了。

 

這裏有幾個概念:

1、編譯  .java --->.class,如果沒有.class或者.java有更新內容,編譯或重新編譯.class,加載到jvm中

2、重載解析  根據方法名,找到所有匹配的方法,然後根據參數找到要調用的方法

3、靜態綁定 如果是private ,staitic ,final方法 ,構造器,明確是屬於類本身的,可以快速找到

4、動態綁定,就需要從超類到自身找一遍(這樣開銷比較大,jvm預設了method table,),然後找最合適的執行(主要是看有沒有重寫,重寫過會執行重寫的)

靜態綁定的方法,是編譯時隨着類一起加載的,動態綁定的方法是需要在運行時通過多態的特性去確定的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章