Java語言的反射機制
阿新 • • 發佈:2020-08-21
一、Java語言的反射機制:
1.Java的反射(reflection)機制是指在程式的執行狀態中,
-
- 可以構造任意一個類的物件
- 可以瞭解任意一個物件所屬的類
- 可以瞭解任意一個類的成員變數和方法
- 可以呼叫任意一個物件的屬性和方法
這種動態獲取程式資訊以及動態呼叫物件的功能稱為Java語言的反射機制。(反射被視為動態語言的關鍵)
2.Java反射機制主要提供了以下功能:
- 在執行時判斷任意一個物件所屬的類;
- 在執行時構造任意一個類的物件;
- 在執行時判斷任意一個類所具有的成員變數和方法;
- 在執行時呼叫任意一個物件的方法;
- 生成動態代理。
二、獲取Class物件:
1.對於每一個類在載入時都會有唯一的Class物件,Class物件中包含了所有需要動態獲取的類的資訊,所有Class類是Reflection API中的核心類
2.獲取Class物件的四種方法:
-
- obj.getClass()
- class屬性
- Class.forName()
- ClassLoader
例:
1 public class Test1 { 2 public static void main(String[] args) throws ClassNotFoundException { 3 //得到Class類物件的四種方法 4 //1. 5 Object obj = new String(); 6 Class clz1 = obj.getClass(); 7 8 //2. 9 Class clz2 = String.class; 10 11 //3. 12 try { 13 Class clz3 = Class.forName("java.lang.String"); 14 } catch (ClassNotFoundException e) { 15 e.printStackTrace();16 } 17 18 //4. 19 ClassLoader cl = ClassLoader.getSystemClassLoader(); 20 Class clz4 = cl.loadClass("java.util.ArrayList"); 21 } 22 }
三、Reflection(API):
在JDK中,主要由以下類來實現Java反射機制,這些類都位於java.langreflect包中:
- class:類:代表個類
- Field類:代表類的成員變數(成員變數也稱為類的屬性)
- Method類:代表類的方法
- Modifier類:代表修飾符
- Constructor類:代表類的構造方法
- Araay類:提供了動態建立陣列,以及訪問陣列的元素的靜態方法
注意:
在Class物件的方法中,所有getXXX方法只能反射出成員),但是隻限於類本身的成員
心得: