更新時間:2022-12-06 11:42:41 來源:動力節點 瀏覽1726次
Java反射invoke方法是什么?首先我們來了解一下什么是Java中的反射。
反射就是將類別的各個組成部分進行剖析,可以得到每個組成部分,就可以對每一部分進行操作
Java反射機制應用場景:逆向代碼、動態生成類框架等,使用反射機制能夠大大的增強程序的擴展性。
反射的基本步驟:首先獲得Class對象,然后實例化對象,獲得類的屬性、方法或者構造函數,最后訪問屬性、調用方法、調用構造函數創建對象。而invoke()方法就是用來執行指定對象的方法。
在比較復雜的程序或框架中來使用反射技術,可以簡化代碼提高程序的復用性。
講的是Method類的invoke()方法。
既然是講invoke方法,那就不講怎么使用反射了,代碼上來先:
package online;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
public class Msym {
public void test(String[] arg){
for (String string : arg) {
System.out.println(string);
}
}
@Test
public void demo1() throws Exception {
//獲取字節碼對象
Class<Msym> clazz = (Class<Msym>) Class.forName("online.Msym");
//獲取一個對象
Constructor con = clazz.getConstructor();
Msym m = (Msym) con.newInstance();
String[] s = new String[]{"aa","bb"};
//獲取Method對象
Method method = clazz.getMethod("test", String[].class);
//調用invoke方法來調用
method.invoke(m, s);
}
}
測試會報錯:
讓我們來看一下invoke方法:
invoke方法的參數,一個是Object類型,也就是調用該方法的對象,
第二個參數是一個可變參數類型,這個可變參數類型怎么能傳遞給一個數組類型呢?一個是多個參數。一個是一個數組參數,顯然參數的個數不匹配,怎么解決呢?
解決辦法就是將可變參數變成一個參數:
將傳遞進去的s強轉為Object類型
將s重新包裝成一個Object數組
測試一下:
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習