原文地址:http://tutorials.jenkov.com/java-reflection/index.htmlhtml
*By Jakob Jenkovjava
Java的反射机制使得它能够在运行时检查类、接口、字段、方法,而在编译时并不不知道它们的名称。也能够经过反射实例化新的对象,调用方法,get/set字段的值。数据库
Java的反射机制很是强大并且很是有用。对实例而言,在运行时能够映射对象到数据库中的表,就和 Butterfly Persistence 作的同样。或者,在运行时将脚本中的语句映射到真实对象上的方法调用,就和 Butterfly Container 在解析它的配置脚本时作的同样。数组
在互联网上已经有不少关于Java反射的教程了。然而,包括Sun公司提供的在内,大多数Java反射教程都只涉及了Java反射的表面和Java反射机制的可能性。函数
本教程将比我以前看到的大多数教程更深层次的触及Java的反射机制。我将解释Java反射的基本知识,包括如何使用数组、注解、泛型、动态代理、类的动态加载和从新加载。也会告诉你该如何作一些比较具体的事情,如读取类的全部getter方法,或者访问类的私有字段和方法。本教程也会澄清一些在运行时哪些泛型信息可用的困惑。有些人声称,全部的泛型信息在运行时都丢失了。这中理解是不对的。spa
本教程将基于Java 6介绍Java的反射机制。翻译
在这里有一个快速使用Java反射的例子展现了使用反射时的样子:
代理
1 Method[] methods = MyObject.class.getMethods(); 2 for(Method method : methods){ 3 System.out.println("method = " + method.getName()); 4 }
在这个例子中获得了MyObject的Class对象。这个例子经过Class对象获取了MyObject类中的方法列表,而且迭代打印出了各个方法的方法名。
这一切到底是如何工做将在整个教程的剩余部分中进一步阐述(在其余文章中)。code
这是一个本教程到目前为止涵盖的主题列表: htm
(敬请期待下一篇翻译)