Java反射

一、Class反射機制

      指的是可以於運行時加載,探知和使用編譯期間完全未知的類.

       程序在運行狀態中, 可以動態加載一個只有名稱的類, 對於任意一個已經加載的類,都能夠知道這個類的所有屬性和方法; 對於任意一個對象,都能        調用他的任意一個方法和屬性;

       加載完類之後, 在堆內存中會產生一個Class類型的對象(一個類只有一個Class對象), 這個對象包含了完整的類的結構信息,而且這個Class對象           就像一面鏡子,透過這個鏡子看到類的結構,所以被稱之爲:反射.

      每個類被加載進入內存之後,系統就會爲該類生成一個對應的java.lang.Class對象,通過該Class對象就可以訪問到JVM中的這個類.

二、Class對象的獲取

           對象的getClass()方法;

           類的.class(最安全/性能最好)屬性;

           運用Class.forName(String className)動態加載類,className需要時類的全限定名(最常用)

三、創建對象

       通過反射來生成對象的方式有兩種:

          使用Class對象的newInstance()方法來創建該Class對象對應類的實例(這種方式要求該Class對象的對應類有默認構造器).

         先使用Class對象獲取指定的Constructor對象, 再調用Constructor對象的newInstance()方法來創建該Class對象對應類的實例(通過這種方式可           以選擇指定的構造器來創建實例).

四、訪問成員變量 

       通過Class對象的的getField()方法可以獲取該類所包含的全部或指定的成員變量Filed,Filed提供瞭如下兩組方法來讀取和設置成員變量值.

     getXxx(Object obj): 獲取obj對象的該成員變量的值, 此處的Xxx對應8中基本類型,如果該成員變量的類型是引用類型, 則取消get後面的Xxx;

     setXxx(Object obj,Xxx val): 將obj對象的該成員變量值設置成val值.此處的Xxx對應8種基本類型, 如果該成員類型是引用類型, 則取消set後面的Xxx;

     注: getDeclaredXxx方法可以獲取所有的成員變量,無論private/public;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章