首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 反射機制實戰(三):建構子與方法呼叫完整範例解析

     編輯:Java 相關知識

前言

上一篇介紹基本反射建立物件(無參建構子)。本文進階示範帶參數建構子與帶參數方法的反射呼叫,並分析反射的優缺點。

1. 呼叫帶參數建構子:建立 StringBuffer("example")

// 1. 取得 Class 物件
Class cla = Class.forName("java.lang.StringBuffer");

// 2. 定義參數型別陣列
Class[] paraTypes = new Class[]{String.class};

// 3. 取得對應建構子
Constructor constructor = cla.getConstructor(paraTypes);

// 4. 準備實際參數值
Object[] paraValues = new Object[]{"example"};

// 5. 實例化物件
Object obj = constructor.newInstance(paraValues); // 等同 new StringBuffer("example")

若為無參建構子,paraTypes 與 paraValues 傳 null 或長度 0 陣列即可。

2. 呼叫帶參數方法:obj.insert(4, 'u')

Class[] methodParaTypes = new Class[]{int.class, char.class};
Method method = cla.getMethod("insert", methodParaTypes);
Object[] methodArgs = new Object[]{4, 'u'};
method.invoke(obj, methodArgs);

3. 反射的三大缺點

  1. 代碼笨拙冗長:一行 br.insert(4,'u') 需四行反射代碼。
  2. 失去編譯期型別檢查:錯誤只能在運行時拋出 NoSuchMethodException、IllegalArgumentException 等,增加異常處理負擔。
  3. 效能損失:反射呼叫比直接呼叫慢數倍(JIT 難優化、存取檢查、裝箱/拆箱)。

4. 最佳實務建議 (Effective Java)

「一般應用不應在運行時以反射方式訪問物件,僅在極受限情況下使用。」

  • 適用場景:IDE 程式碼提示、框架(Spring、Hibernate)依配置實例化 Bean、RPC 框架動態調用。
  • 一般應用:可在 Factory Method 內部封裝反射細節,對外暴露型別安全介面。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved