【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(new SwitchCaseDemo());
- }
- } 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");
- }
- }
执行结果:
转自:http://blog.csdn.net/qq_14852397/article/details/47222857