運(yùn)行時(shí)類型識別(RTTI, Run-Time Type Information)是Java中非常有用的機(jī)制,在java中,有兩種RTTI的方式,一種是傳統(tǒng)的,即假設(shè)在編譯時(shí)已經(jīng)知道了所有的類型;還有一種,是利用反射機(jī)制,在運(yùn)行時(shí)再嘗試確定類型信息。

  本篇博文會(huì)結(jié)合Thinking in Java 的demo 和實(shí)際開發(fā)中碰到的例子,對Java反射和獲取類型信息做總體上整理。文章主要分為三塊:

  •   Java類加載和初始化

  •   Java中RTTI

  •   Java利用反射獲取運(yùn)行時(shí)類型信息

一:Java類加載和初始化

  在學(xué)習(xí)RTTI的時(shí)候,首先需要知道Java中類是如何加載的,java又是如何根據(jù)這些class文件得到JVM中需要的信息(備注:我在此處實(shí)在是想不到更好的描述,望讀者可以給出更好的描述)

1.1 類加載器(類加載的工具)

  類加載器子系統(tǒng)包含一條加載器鏈,只有一個(gè)“原生的類加載器”他是jvm實(shí)現(xiàn)的一部分,可以用來記載本地jar包內(nèi)的class,若涉及加載網(wǎng)絡(luò)上的類,或者是web服務(wù)器應(yīng)用,可以掛接額外的類加載器。

1.2 Java使用一個(gè)類所需的準(zhǔn)備工作

1.2.1 動(dòng)態(tài)加載

  所有的類都是第一次使用的時(shí)候,動(dòng)態(tài)加載到JVM中。創(chuàng)建對類的靜態(tài)成員的引用,加載這個(gè)類。Java程序在開始運(yùn)行的時(shí)候并非完全加載,類都是用的地方在加載,這就是動(dòng)態(tài)加載

 ?、伲菏紫葯z查這個(gè)類是否被加載

  ②:如果沒有加載,再去根據(jù)類名查找.class文件,加載類的字節(jié)碼,并校驗(yàn)是否存在不良代碼,

測試代碼如下:

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

//candy.javapublic class Candy {    static {
        System.out.println("loading Candy");
    }
}//co