1. 程式人生 > 實用技巧 >Java語言的反射機制

Java語言的反射機制

一、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方法只能反射出成員),但是隻限於類本身的成員

心得: