日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java反射使用及性能比较

發布時間:2024/1/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java反射使用及性能比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境準備

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倍

轉載于:https://www.cnblogs.com/lilei2blog/p/8352964.html

總結

以上是生活随笔為你收集整理的java反射使用及性能比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。