真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中怎么利用反射獲取類方法速率

本篇文章給大家分享的是有關(guān)Java中怎么利用反射獲取類方法速率,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,寧波企業(yè)網(wǎng)站建設,寧波品牌網(wǎng)站建設,網(wǎng)站定制,寧波網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,寧波網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

反射介紹

Java反射是指在程序運行狀態(tài)中,能檢查任意對象的內(nèi)容并調(diào)用任意方法。對于任何一個對象,我們都能夠?qū)λ姆椒ê蛯傩赃M行調(diào)用。我們把這種動態(tài)獲取對象信息和調(diào)用對象方法的功能稱之為反射機制。

測試代碼

反射調(diào)用的類

public class ClassA {
    private String name;

    public void setName(String name) {
        this.name = name;
    }
}

測試主類

import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.Method;


@Slf4j
public class MapMain {
    private static final int COUNT = 100000;

    public static void main(String[] args) {
        System.out.println("starting ...");
        long start = System.currentTimeMillis();
        for (int i = 0; i < COUNT; i++) {
            ClassA clzA = new ClassA();
            clzA.setName("A" + i);
        }
        long end = System.currentTimeMillis();
        long diff = end - start;
        System.out.println("native call:" + diff);

        try {
            long start2 = System.currentTimeMillis();
            for (int i = 0; i < COUNT; i++) {
                Class clzA = Class.forName("com.yq.myreflect.ClassA");
                Class[] argsType = new Class[1];
                argsType[0] = String.class;
                Method m = clzA.getMethod("setName", argsType);
                Object obj = clzA.newInstance();
                m.invoke(obj, "A" + i);

            }
            long end2 = System.currentTimeMillis();
            long diff2 = end2 - start2;
            System.out.println("reflect call:" + diff2);
        } catch (Exception ex) {
            ex.printStackTrace();
        }


        try {
            long start3 = System.currentTimeMillis();
           //緩存類,避免多次查找
            Class clzA = Class.forName("com.yq.myreflect.ClassA");
            Class[] argsType = new Class[1];
            argsType[0] = String.class;
            //緩存方法,避免多次查找
            Method m = clzA.getMethod("setName", argsType);
            for (int i = 0; i < COUNT; i++) {
                Object obj = clzA.newInstance();
                m.invoke(obj, "A" + i);
            }
            long end3 = System.currentTimeMillis();
            long diff3 = end3 - start3;
            System.out.println("cache call:" + diff3);
        } catch (Exception ex) {
            ex.printStackTrace();
        }


    }
}

測試結(jié)果

多次運行的平均結(jié)果

starting ...
native call:33
reflect call:126
cache call:16

結(jié)果分析

可以看到如果我們緩存了類,以及要調(diào)用的方法后,使用反射比直接調(diào)用還快。

	//緩存類,避免多次查找
        Class clzA = Class.forName("com.yq.myreflect.ClassA");
        Class[] argsType = new Class[1];
        argsType[0] = String.class;
        //緩存方法,避免多次查找

以上就是Java中怎么利用反射獲取類方法速率,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享名稱:Java中怎么利用反射獲取類方法速率
瀏覽地址:http://weahome.cn/article/ppjpgi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部