环境准备

package com.lilei.pack09;

public class Logger {

    public void show(){
System.out.println("hello world");
} public int cal(int a,int b){
return a + b;
} public String multi(String... args){ return args.length+";";
} }

使用反射

package com.lilei.pack09;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; public class app1 { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Class c = Class.forName("com.lilei.pack09.Logger"); Method[] ms = c.getMethods(); Method m_show = c.getMethod("show", null); m_show.invoke(new Logger(), null); Method m_cal = c.getMethod("cal", new Class[]{int.class,int.class}); Object result = m_cal.invoke(new Logger(), 233,2233); new Logger().multi("v","dd","ds"); System.out.println(result); Method m_multi = c.getMethod("multi", new Class[]{String[].class}); result = m_multi.invoke(new Logger(), new Object[]{new String[]{"v","dd","ds"}}); System.out.println(result);
} }

性能比较

常规创建对象调用方法和通过反射进行调用方法

package com.lilei.pack09;

import java.util.Date;

public class app2 {

    public static void main(String[] args) {

        Logger logger = new Logger();

        int result = 0;

        System.out.println(new Date());
for (int i = 0; i < 2000000000; i++){
result += logger.cal(i,i);
} System.out.println(result);
System.out.println(new Date());
} }

消耗时间:

package com.lilei.pack09;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Date; public class app3 { public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Logger logger = new Logger(); Method m = logger.getClass().getMethod("cal", new Class[]{int.class,int.class}); int result = 0; System.out.println(new Date());
for (int i = 0; i < 2000000000; i++){
Integer in = (Integer)m.invoke(logger, i,i);
result += in.intValue();
} System.out.println(result);
System.out.println(new Date());
} }

消耗时间:

通过使用反射消耗的时间是通过对象调用方法的40-50倍

最新文章

  1. [原]分享一下我和MongoDB与Redis那些事
  2. 软工_个人项目反(shai)思(zhao)
  3. 对Jena的简单理解和一个例子
  4. css清除浮动的处理方法
  5. Mysql中将查询出来的多列的值用逗号拼接
  6. HDU 1116 || POJ 1386 || ZOJ 2016 Play on Words (欧拉回路+并查集)
  7. nodejs 操作mysql
  8. Android 获取本机WIFI及3G网络IP
  9. PHP学习之[第03讲]PHP5.4 语法、常量、变量、数据类型详解
  10. SPI模式下MCU对SD卡的控制及操作命令
  11. UNIX基础--进程和守护进程
  12. 关于Java中继承多接口同名方法的问题
  13. Java并发编程Semaphore
  14. 7_linux用户及权限(2)和管理
  15. python 获取列表中次大的数值.
  16. Idea 12配置SPring MVC 和Tomcat Server
  17. 一个典型的多表参与连接的复杂SQL调优(SQL TUNING)引发的思考
  18. Azure PowerShell (15) 批量导出Azure ASM/ARM VM信息
  19. 20155310 2016-2017-2 《Java程序设计》第八周学习总结
  20. Linux下安装python虚拟环境(virtualenv,vritulaenvwrapper)

热门文章

  1. FFmepg 如何在 window 上使用?
  2. python技巧
  3. Wireshark理解TCP乱序重组和HTTP解析渲染
  4. SDP(9):MongoDB-Scala - data access and modeling
  5. 利用ffmpeg做视频解码的顺序
  6. 安装JBoss Tool 出错
  7. Invalid property &#39;url&#39; of bean class [com.mchange.v2.c3p0.ComboPooledDataSource]
  8. StackExchange.Redis 二次封装
  9. Dshell----开源攻击分析框架
  10. 权限的分类(shiro项目中来的五)