Java的反射机制,使得我们可以方便的在运行时检视:类、接口、变量和方法,而不需要在编译时期就知道类或方法等的名字。使用反射也可以初始化新的对象、调用方法、获取或赋予变量值。
Java的反射机制既强大又有用。比如,当我们需要在运行时把一个对象映射到到数据库的一张表上,就像Butterfly Persistence做的那样。再或者,当我们需要在运行时把脚本语言的语句映射为对象的方法调用,就像Butterfly Container在解析它的配置脚本时做的那样。
网络上已经有很多关于Java反射机制的教程了,然而它们中的大多数,甚至包括Sun公司自己的教程,对于Java反射机制以及它所带来的好处说明都仅仅是浮于表面的。
本教程将比大多数我所看到的教程更深入的介绍Java反射机制。它会解释一些关于Java反射机制的基本概念,包括:如何结合数组、注解、通用代理和动态代理使用,进行类的动态加载和重加载。它也会向你展示如何完成一些特定的任务,比如获取一个类所有的getter
方法,或者是访问一个类的私有变量或方法。本教程还将扫除一些对于运行时可以获取的普通信息的误解。一些人声称在运行时状态下,所有的普通信息都丢失了,这是不对的。
本教程基于JDK6的Java反射机制进行描述。
Java反射例子
下面是一个向你展示Java反射机制如何使用的快速入门例子
<pre>
Method[] methods = MyObject.class.getMethods();
for(Method method : methods){
System.out.println("method = " + method.getName());
}
</pre>
这个例子获取了MyObject
的Class
对象,通过Class
对象获取了当前类中的所有方法,迭代返回的方法列表并打印了方法的名称。
更详细的解释将在本系列教程的后续部分进行讲解。