深入理解JVM之七 靜態分派與動態分派

2021-08-18 13:14:09 字數 529 閱讀 8028

public class o

static class b extends a{}

static class c extends a{}

public void a(a a)

public void a(b b)

public void a(c c)

public static void main(string args)

}

如果在型別c中找到與常量中描述符和簡單名稱都相符的方法,則進行訪問許可權的校驗,如果通過則返回這個方法的直接引用,查詢結束;如果不通過,則返回非法訪問異常

如果在型別c中沒有找到,則按照繼承關係從下到上依次對c的各個父類進行第2步的搜尋和驗證過程

如果始終沒有找到合適的方法,則丟擲抽象方法錯誤的異常

從這個過程可以發現,在第一步的時候就在執行期確定接收物件(執行方法的所有者程稱為接受者)的實際型別,所以當呼叫invokevirtual指令就會把執行時常量池中符號引用解析為不同的直接引用,這就是方法重寫的本質。

JVM常量池與String類深入理解

建立乙個string有二種形式 第一種形式 string a abc string b abc a引用的字串存放在常量池中,當建立b引用的字串時,會先從常量池中查詢有沒有該字串,如果有,就返回常量池中的字串。如果沒有,就建立該字串物件並放在常量池中,因為字串非常常用,jvm為了提高效能和減少記憶體開...

深入理解PHP原理之靜態變數

通常意義上靜態變數是靜態分配的,他們的生命週期和程式的生命週期一樣,只有在程式退出時才結束期生命週期,這和區域性變數相反。靜態變數的型別可以分為靜態全域性變數 靜態區域性變 靜態成員變數,最常見的是靜態區域性變數及靜態成員變數,先看看如下區域性變數的使用 function t t t t 上述的程式...

iOS 靜態庫的深入理解之訪問許可權問題

一直以為做靜態庫就是為了更好的封裝 開放該開放的介面,遮蔽一些內部實現細節 直接的理解就是介面標頭檔案 h 中沒有宣告的函式或類是不能訪問的。原來這個認識是錯誤的。先上測試示例,在分析情況 製作了乙個.a靜態庫 裡面檔案有介面檔案 testdanlishare.h和.m 測試類 settingman...