欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入解析Java中反射中的invoke()方法

 更新時(shí)間:2021年06月01日 15:09:42   作者:碼上猿夢  
最近復(fù)習(xí)了一下Java反射的使用,正好了解一下Java中反射中的invoke()方法,稍微整理精簡一下做下分享,感興趣的可以了解一下

先講一下java中的反射:

反射就是將類別的各個(gè)組成部分進(jìn)行剖析,可以得到每個(gè)組成部分,就可以對每一部分進(jìn)行操作

反射機(jī)制應(yīng)用場景:逆向代碼、動(dòng)態(tài)生成類框架等,使用反射機(jī)制能夠大大的增強(qiáng)程序的擴(kuò)展性。

反射的基本步驟:首先獲得Class對象,然后實(shí)例化對象,獲得類的屬性、方法或者構(gòu)造函數(shù),最后訪問屬性、調(diào)用方法、調(diào)用構(gòu)造函數(shù)創(chuàng)建對象。而invoke()方法就是用來執(zhí)行指定對象的方法。

在比較復(fù)雜的程序或框架中來使用反射技術(shù),可以簡化代碼提高程序的復(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é)碼對象
        Class<Msym> clazz = (Class<Msym>) Class.forName("online.Msym");
        //獲取一個(gè)對象
        Constructor con =  clazz.getConstructor();
        Msym m = (Msym) con.newInstance();
        String[] s = new String[]{"aa","bb"};
        //獲取Method對象
        Method method = clazz.getMethod("test", String[].class);
        //調(diào)用invoke方法來調(diào)用
        method.invoke(m, s);
    }
}

測試會報(bào)錯(cuò):

紅色框框顯示是參數(shù)錯(cuò)誤,test方法需要是字符串?dāng)?shù)組啊,我傳遞也是字符串?dāng)?shù)組,怎么就不對了??

讓我們來看一下invoke方法:

invoke方法的參數(shù),一個(gè)是Object類型,也就是調(diào)用該方法的對象,

第二個(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ù)組

測試一下:

結(jié)果可行。

作者:碼上猿夢
出處:http://www.cnblogs.com/daimajun/

到此這篇關(guān)于深入解析Java中反射中的invoke()方法的文章就介紹到這了,更多相關(guān)Java invoke()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Idea如何使用Fast Request接口調(diào)試

    Idea如何使用Fast Request接口調(diào)試

    這篇文章主要介紹了Idea如何使用Fast Request接口調(diào)試問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java Timer測試定時(shí)調(diào)用及固定時(shí)間執(zhí)行代碼示例

    java Timer測試定時(shí)調(diào)用及固定時(shí)間執(zhí)行代碼示例

    這篇文章主要介紹了java Timer測試定時(shí)調(diào)用及固定時(shí)間執(zhí)行代碼示例,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Spring Session的使用示例

    Spring Session的使用示例

    最近團(tuán)隊(duì)一個(gè)項(xiàng)目需要使用Session,之前沒有在實(shí)際項(xiàng)目中使用過Spring-Session,這里記錄一下使用的過程
    2021-06-06
  • java生成excel并導(dǎo)出到對應(yīng)位置的方式

    java生成excel并導(dǎo)出到對應(yīng)位置的方式

    這篇文章主要介紹了java生成excel并導(dǎo)出到對應(yīng)位置的方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java多線程編程安全退出線程方法介紹

    Java多線程編程安全退出線程方法介紹

    這篇文章主要介紹了Java多線程編程安全退出線程方法介紹,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Java多線程CAS操作原理代碼實(shí)例解析

    Java多線程CAS操作原理代碼實(shí)例解析

    這篇文章主要介紹了Java多線程CAS操作原理代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫進(jìn)行修改url操作

    jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫進(jìn)行修改url操作

    這篇文章主要為大家詳細(xì)介紹了jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫進(jìn)行修改url操作,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java實(shí)現(xiàn)撲克牌程序

    Java實(shí)現(xiàn)撲克牌程序

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)撲克牌程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • JavaWeb如何實(shí)現(xiàn)禁用瀏覽器緩存

    JavaWeb如何實(shí)現(xiàn)禁用瀏覽器緩存

    這篇文章主要介紹了JavaWeb如何實(shí)現(xiàn)禁用瀏覽器緩存,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 關(guān)于Spring中Bean的創(chuàng)建進(jìn)行更多方面的控制

    關(guān)于Spring中Bean的創(chuàng)建進(jìn)行更多方面的控制

    今天小編就為大家分享一篇關(guān)于關(guān)于Spring中Bean的創(chuàng)建進(jìn)行更多方面的控制,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評論