運行時類型識別(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é)碼,并校驗是否存在不良代碼,
測試代碼如下:
//candy.javapublic class Candy { static { System.out.println("loading Candy"); } }//co