Java 反射

Class

 

            Java 程序彙總的各個 Java 類屬於同一類事物,描述這類事物的 Java 類名就是 Class。Class 表示在內存中存儲的字節碼。

 

           (1)獲取字節碼的三種方式:

                                          1 、類名.class。 例如:System.class;

                                          2 、對象.getClass()。例如:new Date().getClass();

                                          3、Class.forName("類名")。例如:Class.forName("java.util.Date");


           (2)九個預定義 Class 實例對象:

 

                                                     boolean、byte、char、short、int、long、float、double、void

 

 

反射

 

          反射就是把 Java 類中的各種成分映射成相應的 Java 類。例如,一個 Java 類中用一個 Class 類的對象來表示,一個類中的組成部分:成員變量、方法、構造方法、包等等信息也用一個個 Java 類來表示。表示 Java 類的 Class 類顯然要提供一系列的方法,來過的其中的變量、方法、構造方法、修飾符、包等信息,這些信息就是用相應類的實例對象來表示,它們是 Field、Method、Constructor、Package 等等。一個類中的每個成員都可以用相應的反射 API 類的一個實例對象來表示,通過調用 Class 類的方法可以得到這些實例對象。

 

 

Constructor 類

 

          一個 Constroctor 類代表一個字節碼中的一個構造方法。

 

           (1)得到一個類中的所有構造方法。例如:Constroctor[] constroctors = Class.forName("java.lang.String").getConstroctors();

 

           (2)得到一個類中的某一個構造方法。例如:Constroctor constroctor = Class.forName("java.lang.String").getConstroctor(StringBuffer.class);

 

            編程實例:用反射的方式創建一個類的實例對象

 

           

 

 

Field 類

 

 

              Field 類代表某個類中的一個成員變量。因爲 Field 是對應到對象上面的成員變量,所以 Field 代表的成員變量是具體的,不是抽象的,一個類的字節碼對應着一個類的成員變量。

 

              編程實例: 用反射的方式獲取一個類中的成員變量,並修改變量的值

 

          

 

           運行結果:

 

           原名:DriverKing
           改後:DriverKing_斌

 

           編程實例:將任意一個對象中的所有 String 類型的成員變量所對應的字符串內容中的 “b” 改爲 “a”

 

          

 

           運行結果:

 

           black,hubei,basketball,23
           alack,huaei,aasketaall,23

 

 

 Method 類

 

         Method 類代表某個類中的一個成員方法。

 

          (1)得到類中的某一個方法。例如:Method charAt = Class.forName("java.lang.String").getMethod("charAt",int.class);

 

          (2)調用方法。例:System.out.println(charAt.invoke(str,2));  // 普通方式調用: System.out.println(str.charAt(2));

 

           編程實例:用反射的方式調用某個類的方法

 

          

 

          (3)用反射的方式執行某個類的 main 方法

 

          

 

          (4)對數組的反射

 

                 具有相同維數和元素類型的數組屬於同一個類型,即代表有相同的 Class 實例對象。相同的維數,例如:二維數組就是數組的數組,也就是說數組裏面存放的是引用類型的對象,它的字節碼就不相同。所以 具有相同維數和元素類型的數組纔是屬於同一個類型。如果想獲得一個數組的類型用:Class 實例對象的 getSuperClass()

 

          編程實例:用反射的方法打印數組

 

         

 

 

         (5)對集合的反射

 

          編程實例:利用配置文件指定集合的類型,然後再用反射創建集合並打印集合

 

          

 

 

        (6)用類加載器加載配置文件

 

          

 

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