運作時類型識别(run-time type identification ,RTTI)的概念上看非常簡單: 當隻有一個指向對象基類的引用時RTTI機制可以讓你找到這個對象的确切概念。
1。Class對象是RTTI的核心,Class的類的類,每個類都有一個class對象。每當編寫并且編譯一個新類,就會産生一個Class對象(被儲存在同名的.class檔案當中)
2。Class.forName("classname"),如果對象沒有加載就加載對象(這将會觸發類的靜态初始化)
Class.newInstance()用來産生一個對象。如
Class m = Class.forName("classname");//1
Object o = m.newInstance();//2
java也提供" 類字面常量"的機制生成對象的引用。像這樣:
A.class
對于基本類型,boolean.class === Boolean.TYPE , char.class ===Character.TYP
void.class ===Void.TYPE,等等。。。。
那麼也可以用Class m = char.class; //或者 Class m = <aclass><aclass>.class
Object o = m.newInstance();
((Char)o).××
3。instanceof 關鍵字用于檢查對象是不是某個特定類型的執行個體。這用于類型轉換前做檢測。如:
if ( x instanceof Dog )
((Dog)x).bark();
</aclass>除了 instanceof 關鍵字以外,還可以使用 Class.isInstance() 方法,兩者功能相同。
<aclass>
4。instanceof的替代方案是: x.getClass == Y.class 或者x.getClass.equals( Y.class)
5。Class對象的getInterfaces()獲得接口,getSurperClass 或者獲得超類。
6。反射是運作時的類資訊。java附帶的庫java.lang.reflect含有Field,Method,Constructor類(每個類都實作了Memeber接口)。這些類型的對象是有JVM在運作時建立的,用以表示未知類裡對象的成員,然後用Constructor建立新的對象,用get ()和set()方法讀取和修改Field對象關聯的字段,用invoke()方法調用于Method對象關聯的方 法,還可以用getFields(),getMethods(),getConstructors()等等方法。</aclass>