`
tcgbp
  • 浏览: 4539 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

使用反射测试函数初探 哈哈

阅读更多
 
package com.tcgbp.test;
import static com.tcgbp.tools.ToolMethods.*;
import static com.tcgbp.Sort.ArraySort.*;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;

public class Test {

	/**
	 * @param args
	 * @throws NoSuchMethodException 
	 * @throws SecurityException 
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 * @throws IllegalArgumentException 
	 * @throws InstantiationException 
	 */
	public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {

//		testMethod(Test.class.getDeclaredMethod("randomArray",int.class),500);
//		
//		testMethod(Test.class.getDeclaredMethod("randomArray",int.class),10000);
//		
		testMethod(com.tcgbp.tools.ToolMethods.class.getDeclaredMethod("randomArray",int.class),1);
//		
//		testMethod(Test.class.getDeclaredMethod("randomArray",int.class),200);
		
		for(int i=1;i<=32;i++)
			testMethod(com.tcgbp.tools.ToolMethods.class.getDeclaredMethod("randomArray",int.class),i);
		
		
		int al = 10000;
		
		testMethod(com.tcgbp.Sort.ArraySort.class.getDeclaredMethod("bubbleSort",int[].class),randomArray(al));
		
		testMethod(com.tcgbp.Sort.ArraySort.class.getDeclaredMethod("bilateralBubbleSort",int[].class),randomArray(al));
		
		testMethod(com.tcgbp.Sort.ArraySort.class.getDeclaredMethod("selectSort",int[].class),randomArray(al));
		
		testMethod(com.tcgbp.Sort.ArraySort.class.getDeclaredMethod("insertSort",int[].class),randomArray(al));
		
	}
	
	/*
	 * 用于测试randomArray()方法,至少吧
	 */
	public static void testMethod(Method m, int n) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
		long s = System.nanoTime();
		m.invoke(null, n);
		long duration = System.nanoTime() - s;
		println(m.getName() + "(" + n + ")方法運行了" + duration + "纳秒!");
	}
	
	/*
	 * 用于测试数组排序函数
	 */
	public static void testMethod(Method m, int[] n) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException{
		long s = System.nanoTime();
		m.invoke(null, n);
		long duration = System.nanoTime() - s;
		println(m.getName() + "()方法運行了" + duration + "纳秒!");
	}
	
	/*
	 * 泛型版的,这里没什么用   ╮(╯▽╰)╭ java的泛型
	 */
	public static <T> void testMethod(Method m, T n) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
		long s = System.nanoTime();
		T d = (T)m.invoke(null, n);
		long duration = System.nanoTime() - s;
		println(m.getName() + "(" + n.toString() + ")方法運行了" + duration + "纳秒!");
	}
}
 

 

第一次使用java的反射机制,比我想象的要顺利,不知道能不能做成泛型方法的

  

 我就不太明白为什么第1和第16次调用占得时间就特别多呢      第32次没有!

 

还有testMethod该怎么应用还没搞清楚

 

 

运行结果 写道
randomArray(1)方法運行了913803纳秒!
randomArray(1)方法運行了11454纳秒!
randomArray(2)方法運行了10895纳秒!
randomArray(3)方法運行了11174纳秒!
randomArray(4)方法運行了11733纳秒!
randomArray(5)方法運行了12012纳秒!
randomArray(6)方法運行了13689纳秒!
randomArray(7)方法運行了13130纳秒!
randomArray(8)方法運行了13410纳秒!
randomArray(9)方法運行了13689纳秒!
randomArray(10)方法運行了14248纳秒!
randomArray(11)方法運行了14806纳秒!
randomArray(12)方法運行了15086纳秒!
randomArray(13)方法運行了15645纳秒!
randomArray(14)方法運行了17600纳秒!
randomArray(15)方法運行了3375848纳秒!
randomArray(16)方法運行了71517纳秒!
randomArray(17)方法運行了16203纳秒!
randomArray(18)方法運行了16204纳秒!
randomArray(19)方法運行了16762纳秒!
randomArray(20)方法運行了17320纳秒!
randomArray(21)方法運行了18159纳秒!
randomArray(22)方法運行了18159纳秒!
randomArray(23)方法運行了18438纳秒!
randomArray(24)方法運行了18997纳秒!
randomArray(25)方法運行了19276纳秒!
randomArray(26)方法運行了19555纳秒!
randomArray(27)方法運行了23746纳秒!
randomArray(28)方法運行了21232纳秒!
randomArray(29)方法運行了21232纳秒!
randomArray(30)方法運行了22070纳秒!
randomArray(31)方法運行了22070纳秒!
randomArray(32)方法運行了22629纳秒!
bubbleSort()方法運行了560466763纳秒!
bilateralBubbleSort()方法運行了458224998纳秒!
selectSort()方法運行了336764309纳秒!
insertSort()方法運行了161829227纳秒!

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics