java反射使用及性能比较
2024-08-24 07:58:08
环境准备
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倍
最新文章
- [原]分享一下我和MongoDB与Redis那些事
- 软工_个人项目反(shai)思(zhao)
- 对Jena的简单理解和一个例子
- css清除浮动的处理方法
- Mysql中将查询出来的多列的值用逗号拼接
- HDU 1116 || POJ 1386 || ZOJ 2016 Play on Words (欧拉回路+并查集)
- nodejs 操作mysql
- Android 获取本机WIFI及3G网络IP
- PHP学习之[第03讲]PHP5.4 语法、常量、变量、数据类型详解
- SPI模式下MCU对SD卡的控制及操作命令
- UNIX基础--进程和守护进程
- 关于Java中继承多接口同名方法的问题
- Java并发编程Semaphore
- 7_linux用户及权限(2)和管理
- python 获取列表中次大的数值.
- Idea 12配置SPring MVC 和Tomcat Server
- 一个典型的多表参与连接的复杂SQL调优(SQL TUNING)引发的思考
- Azure PowerShell (15) 批量导出Azure ASM/ARM VM信息
- 20155310 2016-2017-2 《Java程序设计》第八周学习总结
- Linux下安装python虚拟环境(virtualenv,vritulaenvwrapper)
热门文章
- FFmepg 如何在 window 上使用?
- python技巧
- Wireshark理解TCP乱序重组和HTTP解析渲染
- SDP(9):MongoDB-Scala - data access and modeling
- 利用ffmpeg做视频解码的顺序
- 安装JBoss Tool 出错
- Invalid property &#39;url&#39; of bean class [com.mchange.v2.c3p0.ComboPooledDataSource]
- StackExchange.Redis 二次封装
- Dshell----开源攻击分析框架
- 权限的分类(shiro项目中来的五)