成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Java動(dòng)態(tài)調(diào)用方法

Zoom / 1977人閱讀

摘要:主要用到反射機(jī)制,和這些類(lèi)。動(dòng)態(tài)調(diào)用的方法其中,為類(lèi)的對(duì)象,為要被調(diào)用的方法名得到對(duì)象得到對(duì)象中名為的不帶參數(shù)的方法。

public void function(String str) {  
    //根據(jù) str的值 調(diào)用相應(yīng)的方法  
}  
public void test() {  
    //code  
}

如str的值為test,就調(diào)用test方法。主要用到j(luò)ava反射機(jī)制,Class和Method這些類(lèi)。

動(dòng)態(tài)調(diào)用的方法:a.getClass().getMethod(str, new Class[]{}).invoke(a, new Object[]{})

其中,a為類(lèi)的對(duì)象,str為要被調(diào)用的方法名

a.getClass()得到a.class對(duì)象

getMethod(str, new Class[]{})得到a對(duì)象中名為str的不帶參數(shù)的方法。如果str方法帶參數(shù)如str(String s, int i),就要這樣寫(xiě)getMethod(str, new Class[]{String.class,int.class})

invoke(a,new Object[]{})調(diào)用方法,第一個(gè)參數(shù)是要調(diào)用這個(gè)方法的對(duì)象,如果方法是static的,這個(gè)參數(shù)可以為null。如果調(diào)用有參數(shù)的方法str(String s, int i),應(yīng)該這樣寫(xiě)invoke(a,new Object[]{"jimmy", 1})

下面是代碼,幫助理解

public class MovingInvokeTest {
    private static MovingInvokeTest movingInvokeTest = new MovingInvokeTest(); // 創(chuàng)建MovingInvokeTest對(duì)象

    /*
     * 根據(jù)str字符串調(diào)用方法,變量i只是為了判斷,調(diào)用有幾個(gè)參數(shù)的方法
     */
    public void do_test(String str, int i) throws Exception {
        if (i == 0) {
            // 調(diào)用沒(méi)有參數(shù)的方法
            movingInvokeTest.getClass().getMethod(str, new Class[] {}).invoke(movingInvokeTest, new Object[] {});
        } else if (i == 1) {
            // 調(diào)用有一個(gè)參數(shù)的方法,參數(shù)為String類(lèi)型的s
            movingInvokeTest.getClass().getMethod(str, new Class[] { String.class }).invoke(movingInvokeTest, new Object[] { "s" });
        } else if (i == 2) {
            // 調(diào)用有兩個(gè)參數(shù)的方法 參數(shù)分別為String類(lèi)型的qw和int型的1
            movingInvokeTest.getClass().getMethod(str, new Class[] { String.class, int.class }).invoke(movingInvokeTest, new Object[] { "qw", 1 });
        }
    }

    public void speak() {
        System.out.println("調(diào)用的沒(méi)有參數(shù)的方法");
    }

    public void speak(String s) {
        System.out.println("調(diào)用有一個(gè)參數(shù)的方法,參數(shù)為:" + s);
    }

    public void speak(String s, int i) {
        System.out.println("調(diào)用有兩個(gè)參數(shù)的方法,參數(shù)為,參數(shù)為:" + s + "和" + i);
    }

    public static void main(String[] args) throws Exception {
        movingInvokeTest.do_test("speak", 1);
    }

}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64122.html

相關(guān)文章

  • java動(dòng)態(tài)代理及RPC框架介紹

    摘要:這種語(yǔ)法,在中被稱(chēng)為動(dòng)態(tài)代理。在動(dòng)態(tài)代理機(jī)制中,這個(gè)角色只能是接口。動(dòng)態(tài)代理就是實(shí)現(xiàn)的技術(shù)之一。 所謂動(dòng)態(tài)代理,指的是語(yǔ)言提供的一種語(yǔ)法,能夠?qū)?duì)對(duì)象中不同方法的調(diào)用重定向到一個(gè)統(tǒng)一的處理函數(shù)中來(lái)。python重寫(xiě)__getattr__函數(shù)能夠做到這一點(diǎn),就連世界上最好的語(yǔ)言也提供稱(chēng)為魔術(shù)方法的__call。這種語(yǔ)法除了能更好的實(shí)現(xiàn)動(dòng)態(tài)代理外,還是RPC框架實(shí)現(xiàn)原理的一部分。 動(dòng)態(tài)代理...

    2shou 評(píng)論0 收藏0
  • Java中的動(dòng)態(tài)代理

    摘要:要明白,動(dòng)態(tài)代理類(lèi)的存在意義是為了攔截方法并修改邏輯而動(dòng)態(tài)代理的局限性之一就是只能攔截接口所聲明的方法。因?yàn)閯?dòng)態(tài)代理類(lèi)是繼承自業(yè)務(wù)類(lèi),所以該類(lèi)和方法不能聲明成無(wú)法繼承或重寫(xiě)。者最終都是生成了一個(gè)新的動(dòng)態(tài)代理類(lèi)對(duì)象。 動(dòng)態(tài)代理 1、先談靜態(tài)代理 對(duì)于靜態(tài)代理,我們已經(jīng)很熟悉了。我們擁有一個(gè)抽象類(lèi),真實(shí)類(lèi)繼承自抽象類(lèi)并重寫(xiě)其業(yè)務(wù)方法,代理類(lèi)持有真實(shí)類(lèi)的對(duì)象實(shí)例,在重寫(xiě)業(yè)務(wù)方法中通過(guò)調(diào)用真實(shí)...

    CastlePeaK 評(píng)論0 收藏0
  • Java 動(dòng)態(tài)反射代理

    摘要:靜態(tài)方法生成動(dòng)態(tài)代理類(lèi)同樣需要通過(guò)類(lèi)裝載器來(lái)進(jìn)行裝載才能使用,它與普通類(lèi)的唯一區(qū)別就是其字節(jié)碼是由在運(yùn)行時(shí)動(dòng)態(tài)生成的而非預(yù)存在于任何一個(gè)文件中。 代理:設(shè)計(jì)模式 代理是一種常用的設(shè)計(jì)模式,其目的就是為其他對(duì)象提供一個(gè)代理以控制對(duì)某個(gè)對(duì)象的訪問(wèn)。代理類(lèi)負(fù)責(zé)為委托類(lèi)預(yù)處理消息,過(guò)濾消息并轉(zhuǎn)發(fā)消息,以及進(jìn)行消息被委托類(lèi)執(zhí)行后的后續(xù)處理。showImg(https://segmentfault...

    Thanatos 評(píng)論0 收藏0
  • JAVA代理模式的理解和應(yīng)用

    摘要:代理模式代理模式通俗一點(diǎn)的解釋就是在操作一個(gè)對(duì)象和對(duì)象中的方法時(shí),不是直接操作這個(gè)對(duì)象,還是通過(guò)一個(gè)代理對(duì)象來(lái)操作這個(gè)實(shí)際的目標(biāo)對(duì)象。 代理模式: 代理模式通俗一點(diǎn)的解釋就是在操作一個(gè)對(duì)象和對(duì)象中的方法時(shí),不是直接操作這個(gè)對(duì)象,還是通過(guò)一個(gè)代理對(duì)象來(lái)操作這個(gè)實(shí)際的目標(biāo)對(duì)象。應(yīng)用場(chǎng)景一般是需要在執(zhí)行某個(gè)已經(jīng)寫(xiě)好的方法前后再添加一段邏輯,比如執(zhí)行方法前打印日志,或者在執(zhí)行方法之前和之后打時(shí)...

    CatalpaFlat 評(píng)論0 收藏0
  • 你真的完全了解Java動(dòng)態(tài)代理嗎?看這篇就夠了

    摘要:動(dòng)態(tài)地代理,可以猜測(cè)一下它的含義,在運(yùn)行時(shí)動(dòng)態(tài)地對(duì)某些東西代理,代理它做了其他事情。所以動(dòng)態(tài)代理的內(nèi)容重點(diǎn)就是這個(gè)。所以下一篇我們來(lái)細(xì)致了解下的到底是怎么使用動(dòng)態(tài)代理的。 之前講了《零基礎(chǔ)帶你看Spring源碼——IOC控制反轉(zhuǎn)》,本來(lái)打算下一篇講講Srping的AOP的,但是其中會(huì)涉及到Java的動(dòng)態(tài)代理,所以先單獨(dú)一篇來(lái)了解下Java的動(dòng)態(tài)代理到底是什么,Java是怎么實(shí)現(xiàn)它的。 ...

    haitiancoder 評(píng)論0 收藏0
  • Java動(dòng)態(tài)性(2) - 之反射機(jī)制(Reflection)

    摘要:的動(dòng)態(tài)性反射機(jī)制動(dòng)態(tài)編譯動(dòng)態(tài)執(zhí)行代碼動(dòng)態(tài)字節(jié)碼操作動(dòng)態(tài)語(yǔ)言程序運(yùn)行時(shí)可以改變程序得結(jié)構(gòu)或變量類(lèi)型典型語(yǔ)言等如下代碼不是動(dòng)態(tài)語(yǔ)言但有一定的動(dòng)態(tài)性我們可以利用反射機(jī)制字節(jié)碼操作獲得類(lèi)似動(dòng)態(tài)語(yǔ)言的特性的動(dòng)態(tài)性讓編程的時(shí)候更加靈活反射機(jī)制反射機(jī)制指 1.Java的動(dòng)態(tài)性 反射機(jī)制 動(dòng)態(tài)編譯 動(dòng)態(tài)執(zhí)行JavaScript代碼 動(dòng)態(tài)字節(jié)碼操作 2.動(dòng)態(tài)語(yǔ)言 程序運(yùn)行時(shí),可以改變程序得結(jié)構(gòu)或變量...

    妤鋒シ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<