网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

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://bjjierui.cn/article/ppjpgi.html

其他资讯