【Java反射机制】
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
* @功能描述 Java反射机制 取代 Switch Case
* @author 吥 悔
* @QQ 379839355
* @时间 2015年8月2日 下午11:11:11
*/
public class SwitchCaseDemo {
private static Map<Integer, Method> maps;
// 绑定方法
static {
maps = new HashMap<Integer, Method>();
try {
// maps.put("参数", "方法名")
maps.put(1, new SwitchCaseDemo().getClass().getMethod("sayOne"));
maps.put(2, new SwitchCaseDemo().getClass().getMethod("sayTwo"));
maps.put(3, new SwitchCaseDemo().getClass().getMethod("sayThree"));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 反射机制
* @param y 参数
*/
private void demoValidate2(int y) {
try {
// 判断Map集合中是否存在
if(maps.containsKey(y)) {
// 获取方法对象
Method methodName = maps.get(y);
// 调用方法
methodName.invoke(SwitchCaseDemo.class);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* switch case
* @param x 参数
*/
private void demoValidate1(int x) {
switch (x) {
case 1:
sayOne();
break;
case 2:
sayTwo();
break;
case 3:
sayThree();
break;
default:
break;
}
}
public void sayOne() {
System.out.println("This is say One method !");
}
public void sayTwo() {
System.out.println("This is say Two method !");
}
public void sayThree() {
System.out.println("This is say Three method !");
}
public static void main(String[] args) {
SwitchCaseDemo sc = new SwitchCaseDemo();
// 以毫秒为单位计算
// long startTime = System.currentTimeMillis();//获取当前时间
// demoValidate(3);
// long endTime = System.currentTimeMillis();
// System.out.println("程序运行时间:" + (endTime - startTime) + "ms");
// 以纳秒为单位计算
long start = System.nanoTime(); //获取当前时间
sc.demoValidate1(3);
long end = System.nanoTime();
System.out.println("程序运行时间: " + (end - start) + "ns");
System.out.println("---- 反射实现 ----");
long start2 = System.nanoTime(); //获取当前时间
sc.demoValidate2(3);
long end2 = System.nanoTime();
System.out.println("程序运行时间: " + (end2 - start2) + "ns");
}
}
注意事项:
执行结果:
--------------------------------------------------------------------------------------------------------------------
Author: