華為云計(jì)算 云知識(shí) 類(lèi)型對(duì)象全景圖
類(lèi)型對(duì)象全景圖

以代表列表的list對(duì)象為例,ListKlass既要能充當(dāng)類(lèi)型的功能,又要充當(dāng)對(duì)象的功能,最直觀的辦法就是為L(zhǎng)istKlass關(guān)聯(lián)一個(gè)普通對(duì)象,這個(gè)對(duì)象被稱(chēng)為T(mén)ypeObject。當(dāng)要把list作為一個(gè)普通對(duì)象使用的時(shí)候,虛擬機(jī)里讓ListKlass所關(guān)聯(lián)的TypeObject出面;當(dāng)要把list作為一個(gè)類(lèi)型使用時(shí),虛擬機(jī)則讓ListKlass負(fù)責(zé)處理。Java種的這個(gè)對(duì)象稱(chēng)為java_mirror,這個(gè)對(duì)象里還存儲(chǔ)著static field。

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