更新時(shí)間:2022-12-06 11:42:41 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1881次
Java反射invoke方法是什么?首先我們來了解一下什么是Java中的反射。
反射就是將類別的各個(gè)組成部分進(jìn)行剖析,可以得到每個(gè)組成部分,就可以對(duì)每一部分進(jìn)行操作
Java反射機(jī)制應(yīng)用場(chǎng)景:逆向代碼、動(dòng)態(tài)生成類框架等,使用反射機(jī)制能夠大大的增強(qiáng)程序的擴(kuò)展性。
反射的基本步驟:首先獲得Class對(duì)象,然后實(shí)例化對(duì)象,獲得類的屬性、方法或者構(gòu)造函數(shù),最后訪問屬性、調(diào)用方法、調(diào)用構(gòu)造函數(shù)創(chuàng)建對(duì)象。而invoke()方法就是用來執(zhí)行指定對(duì)象的方法。
在比較復(fù)雜的程序或框架中來使用反射技術(shù),可以簡(jiǎn)化代碼提高程序的復(fù)用性。
講的是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 {
//獲取字節(jié)碼對(duì)象
Class<Msym> clazz = (Class<Msym>) Class.forName("online.Msym");
//獲取一個(gè)對(duì)象
Constructor con = clazz.getConstructor();
Msym m = (Msym) con.newInstance();
String[] s = new String[]{"aa","bb"};
//獲取Method對(duì)象
Method method = clazz.getMethod("test", String[].class);
//調(diào)用invoke方法來調(diào)用
method.invoke(m, s);
}
}
測(cè)試會(huì)報(bào)錯(cuò):
讓我們來看一下invoke方法:
invoke方法的參數(shù),一個(gè)是Object類型,也就是調(diào)用該方法的對(duì)象,
第二個(gè)參數(shù)是一個(gè)可變參數(shù)類型,這個(gè)可變參數(shù)類型怎么能傳遞給一個(gè)數(shù)組類型呢?一個(gè)是多個(gè)參數(shù)。一個(gè)是一個(gè)數(shù)組參數(shù),顯然參數(shù)的個(gè)數(shù)不匹配,怎么解決呢?
解決辦法就是將可變參數(shù)變成一個(gè)參數(shù):
將傳遞進(jìn)去的s強(qiáng)轉(zhuǎn)為Object類型
將s重新包裝成一個(gè)Object數(shù)組
測(cè)試一下:
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)