Java 反射的源頭Class類
阿新 • • 發佈:2018-12-18
Java 反射的源頭Class類
1. Class類
在Object類中定義了以下的方法,此方法將被所有子類繼承:
public final Class getClass()//這是一個泛型方法
以上的方法返回值的型別是一個Class類,此類是Java反射的源頭,實際上所謂反射從程式的執行結果來看也很好理解,即:可以通過物件反射求出類的名稱。
- 對照鏡子後可以得到的資訊:某個類的屬性、方法和構造器、某個類到底實現了哪些介面。對於每個類而言,JRE 都為其保留一個不變的 Class 型別的物件。一個 Class 物件包含了特定某個類的有關資訊。
- Class本身也是一個類
- Class 物件只能由系統建立物件
- 一個類在 JVM 中只會有一個Class例項
- 一個Class物件對應的是一個載入到JVM中的一個.class檔案
- 每個類的例項都會記得自己是由哪個 Class 例項所生成
- 通過Class可以完整地得到一個類中的完整結構(這個類所有構成成分)
2.Class類常用方法
3. 反射Class的理解
3.1. java.lang.Class:是反射的源頭
- 我們建立了一個類,通過編譯(javac.exe),生成對應的.class檔案,我們建立了一個類,通過編譯(java.exe),生成對應的.class檔案,此.class檔案載入到記憶體以後,就是一個執行時類,存在在快取區。
3.2.反射的理解
- Class類就是相當於鏡子一樣,在我們正常的構建類的過程中,我們通常都是會先編寫類的成員變數、方法、構造器等,然後在去new,使用其物件完成一些這個類具有的功能。 而因為有Class這一面鏡子,我可以得到個執行時類的時候,去往回找到構成這個類的所有東西,如成員方法、變數等。
4.Dome
//java.lang.Class:是反射的源頭
//每一個執行時類只加載一次!
@Test
public void test3() {
Person p = new Person();
//通過執行時類的物件,呼叫其getClass(),返回其執行時類
//如:通過小孩可以知道父母是誰
Class clazz = p.getClass();
System.out.println(clazz);//class testReact.Person
}