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

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

  •   Java類加載和初始化

  •   Java中RTTI

  •   Java利用反射獲取運行時類型信息

一:Java類加載和初始化

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

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

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

1.2 Java使用一個類所需的準備工作

1.2.1 動態(tài)加載

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

  ①:首先檢查這個類是否被加載

 ?、冢喝绻麤]有加載,再去根據類名查找.class文件,加載類的字節(jié)碼,并校驗是否存在不良代碼,

測試代碼如下:

平面設計培訓,網頁設計培訓,美工培訓,游戲開發(fā),動畫培訓

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