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)用類加載器加載配置文件