JAVA高級開發之反射

認識反射機制:反射是指對象的反向處理操作。

在正向操作情況下java中必須要導入一個包才能產生類的實例化對象:根據包名.(點)類名找到類

反向處理的話是根據對象來取得對象的來源信息。

方法:public final native Class<?>getClass();

實例:

結果:

此時通過了對象獲得了對象的來源,真的就是反射的本質

在反射中看中的不是對象,而是對象身後的組成(類,構造,普通,成員等)

1.Class類對象的三種實例化模式

Class類是描述整個類的概念,也就是整個反射的操作源頭,在使用Class類的時候需要關注的依然是這個類的對象。

這個類的對象的生產模式一個有三種:

a.任何類的實例化對象都可以通過Object類的getClass()方法取得Class類對象

b.“類 . class ”:直接提供根據某個具體的類來取得Class類的實例化對象

c.使用Class類提供的方法:public static Class<?> forName(String className) throws Exception

 

Class類中提供如下方法:

根據反射創建實例化對象:

public T newInstance():通過這個方法來創建實例化對象,通過Class類實例化對象

 

反射與類操作:

a.取得父類信息   取得類的包名稱:public Package getPackage();

                            取得父類的Class對象 public Class<? super T>getSuperclass();

                              取得父類接口public Class<?>[]getInterfaces();

b.反射調用構造方法:

       Class提供的newInstance()默認調用類中的無參構造 

       Class提供的Constructor(參數列表)  (只能取得修飾符爲public的構造方法)

       取得類中所有構造方法getConstructors(),public修飾  (只能取得修飾符爲public的構造方法)

getDeclaredConstructors()取得所有構造方法,與修飾符無關

getDeclaredConstructor()取得所有構造方法,與修飾符無關

 

c.反射調用普通方法:

                  取得所有普通方法:public Method[]getMethods();  返回本類及其父類的所有public普通方法

                  getDeclareMethods()  所有修飾符,返回本類所有的普通方法,與修飾符無關

 

取得指定方法: public Method(方法名,方法參數)

                          public Method getDeclareMethod(方法名,方法參數)

 

取得方法後調用:Method提供的     public Object invoke(類的實例化對象,具體參數)

 

d.反射調用類中屬性:

                            取得所有類中屬性:  getFields

                            Field getDeclareFields

取得類中指定屬性:Field getFields(屬性名)

                                 Field getDeclaredField(屬性名)

屬性的調用:    設置屬性內容:  public void set(具體類的實例化對象,屬性值)

                           取得屬性內容:public Object get(具體類的實例化對象)


動態設置封裝
AccessibleObject:描述類中結構的可訪問性

動態設置封裝性(1次JVM進程中):
PUBLIC VOID setAccessibleObject(boolean flag):


反射的具體應用:多級VO設置實現

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發佈了82 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章