1. 程式人生 > >Java 反射的源頭Class類

Java 反射的源頭Class類

Java 反射的源頭Class類

1. Class類

在Object類中定義了以下的方法,此方法將被所有子類繼承:

public final Class getClass()//這是一個泛型方法

以上的方法返回值的型別是一個Class類,此類是Java反射的源頭,實際上所謂反射從程式的執行結果來看也很好理解,即:可以通過物件反射求出類的名稱。

獲取物件的包名

  1. 對照鏡子後可以得到的資訊:某個類的屬性、方法和構造器、某個類到底實現了哪些介面。對於每個類而言,JRE 都為其保留一個不變的 Class 型別的物件。一個 Class 物件包含了特定某個類的有關資訊。
  2. Class本身也是一個類
  3. Class 物件只能由系統建立物件
  4. 一個類在 JVM 中只會有一個Class例項
  5. 一個Class物件對應的是一個載入到JVM中的一個.class檔案
  6. 每個類的例項都會記得自己是由哪個 Class 例項所生成
  7. 通過Class可以完整地得到一個類中的完整結構(這個類所有構成成分)

2.Class類常用方法

常用方法

3. 反射Class的理解

3.1. java.lang.Class:是反射的源頭

  1. 我們建立了一個類,通過編譯(javac.exe),生成對應的.class檔案,我們建立了一個類,通過編譯(java.exe),生成對應的.class檔案,此.class檔案載入到記憶體以後,就是一個執行時類,存在在快取區。

3.2.反射的理解

  1. 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
	}