Java中怎么利用反射获取类方法速率

本篇文章给大家分享的是有关Java中怎么利用反射获取类方法速率,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

创新互联公司是一家集网站建设,宁波企业网站建设,宁波品牌网站建设,网站定制,宁波网站建设报价,网络营销,网络优化,宁波网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

反射介绍

Java反射是指在程序运行状态中,能检查任意对象的内容并调用任意方法。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。

测试代码

反射调用的类

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();
        }


    }
}

测试结果

多次运行的平均结果

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

结果分析

可以看到如果我们缓存了类,以及要调用的方法后,使用反射比直接调用还快。

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

以上就是Java中怎么利用反射获取类方法速率,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


当前题目:Java中怎么利用反射获取类方法速率
分享链接:http://bzwzjz.com/article/ppjpgi.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都网站建设 梓潼网站设计 品牌网站建设 定制网站建设多少钱 定制级高端网站建设 成都企业网站建设 手机网站建设 成都网站建设 手机网站制作 成都网站建设 app网站建设 重庆网站建设 成都企业网站制作 网站建设公司 手机网站设计 成都网站制作 网站制作公司 商城网站建设 成都网站建设 成都网站建设 古蔺网站建设 营销网站建设