天天看點

Java---類反射(1)---類反射入門和基礎什麼是類反射反射使用的三個步驟擷取Class對象的三種方式Class.isInstance(Object obj)判定指定的 Object 是否與此 Class 所表示的對象指派相容。類的解剖(擷取類的定義資訊)

JAVA反射機制是在運作狀态中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動态擷取的資訊以及動态調用對象的方法的功能稱為Java語言的反射機制。

反射(Reflection)是Java程式開發語言的特征之一,它允許運作中的Java程式對自身進行檢查, 也稱自審,并能直接操作程式的内部屬性。例如,使用它能獲得Java類中各成員的名稱并顯示出來。

Java的這一能力在實際應用中應用得很多,在其它的程式語言中根本就不存在這一特性。例如,Pascal、C或者C++中就沒有辦法在程式中獲得函數定義相關的資訊。

JavaBean是類反射的實際應用之一,它能讓一些工具可視化的操作軟體元件。這些工具通過類反射動态的載入并取得Java元件(類)的屬性。後面學習的各種架構,基本上都會有反射的使用。

Java---類反射(1)---類反射入門和基礎什麼是類反射反射使用的三個步驟擷取Class對象的三種方式Class.isInstance(Object obj)判定指定的 Object 是否與此 Class 所表示的對象指派相容。類的解剖(擷取類的定義資訊)

最簡單的類反射:(相當于HelloWorld)

Person類:

輸出結果:

Java---類反射(1)---類反射入門和基礎什麼是類反射反射使用的三個步驟擷取Class對象的三種方式Class.isInstance(Object obj)判定指定的 Object 是否與此 Class 所表示的對象指派相容。類的解剖(擷取類的定義資訊)

USB接口:

實作類:

工廠方法:!!!讀取配置檔案的在這裡

main方法:

你配置哪個,就是new哪個實作類的!!

‘#’号是配置檔案的注釋

用于反射的類,如Method,可以在java.lang.reflect包中找到。使用這些類的時候必須要遵循三個步驟:

第一步:獲得你想操作的類的java.lang.Class對象。在運作中的Java程式中,用java.lang.Class類來描述類和接口等。

第二步:調用諸如getDeclaredMethods的方法,取得該類中定義的所有方法的清單。

第三步:使用反射的API來操作這些資訊。

如下面這段代碼:

Class c = Class.forName(“java.lang.String”);

Method ms[] = c.getDeclaredMethods();

System.out.println(ms[0].toString());

它将以文本方式列印出String中定義的第一個方法的原型。

反射示例(模拟instanceof的功能)

方式一

通過對象的getClass方法進行擷取。這種方式需要具體的類和該類的對象,以及調用getClass方法。

方式二

任何資料類型(包括基本資料類型)都具備着一個靜态的屬性class,通過它可直接擷取到該類型對應的Class對象。這種方式要使用具體的類,然後調用類中的靜态屬性class完成,無需調用方法,性能更好。

方式三

通過Class.forName()方法擷取。這種方式僅需使用類名,就可以擷取該類的Class對象,更有利于擴充。

下面看怎麼擷取Class對象的代碼:

運作結果在輸出後面都注釋了。。。

代碼示範:

找出一個類中定義了些什麼方法,這是一個非常有價值也非常基礎的反射用法。

運作結果太長了,自己可以運作看看!

找出一個類中定義的構造方法,構造器沒有傳回類型。

找出一個類中定義了哪些屬性字段。

Class類真的很強大!