華為云計算 云知識 類型對象全景圖
類型對象全景圖

以代表列表的list對象為例,ListKlass既要能充當類型的功能,又要充當對象的功能,最直觀的辦法就是為ListKlass關(guān)聯(lián)一個普通對象,這個對象被稱為TypeObject。當要把list作為一個普通對象使用的時候,虛擬機里讓ListKlass所關(guān)聯(lián)的TypeObject出面;當要把list作為一個類型使用時,虛擬機則讓ListKlass負責處理。Java種的這個對象稱為java_mirror,這個對象里還存儲著static field。

在左邊的Python代碼中,list這個名稱即可以代表類型,通過調(diào)用它創(chuàng)建一個列表對象;也可以代表一個普通對象,被打印出來。同樣的,在Java中,Integer.class這個東西也兼具對象和類型的能力,既可以被打印,也可以用來創(chuàng)建普通對象。我們把這種對象稱為類型對象。顯然,類型對象是虛擬機實現(xiàn)反射功能的基礎(chǔ)。