Java反射机制(Reflection)浅析
Reflection也就是反射,是Java语言的一个重要特征,我们知道,在使用一个类之前,我们往往都已经创建好它了,比如创建一个类文件,然后再写些属性、方法等,也就是这种类是静态的,但反射机制却允许你动态地创建一个类。除了动态地创建一个类外,我们还能动态地获取同类对象的数据,并将这些数据赋给新创建的类,这有点类似克隆复制。在很多时候,我们都需要这种动态创建类的特征,比如在处理一些业务,但这些业务却又稍有区别的时候,往往对应着多个类,在处理的时候,我们就要根据不同的业务处理来调用不同的类,这个时候反射机制就派上用场了。
以下是JDKAPI中关于软件包java.lang.reflect的描述:
提供类和接口,以获取关于类和对象的反射信息。在安全限制内,反射允许编程访问关于加载类的字段、方法和构造方法的信息,并允许使用反射字段、方法和构造方法对对象上的基本对等项进行操作。
如果必需的ReflectPermission可用,则AccessibleObject允许抑制访问检查。
Arrays提供动态创建和访问数组的静态方法。
此包中的类以及java.lang.Class可以适应以下应用程序的需要:调试程序、解释程序、对象检查程序、类浏览程序,以及服务(比如,ObjectSerialization和JavaBean,它们需要访问目标对象(基于其运行时类)的公共成员或给定类声明的成员)。
下面通过两个简单例子来说明反射的用法,首先先创建一个Person类:
packagetest;
publicclassPerson{
privateintage;
privateStringname="";
privateString[]arr=newString[2];
publicPerson(){}
publicPerson(Stringname,intage){ this.name=name; this.age=age; }
publicintgetAge(){ returnage; }
publicvoidsetAge(intage){ this.age=age; }
publicStringgetName(){ returnname; }
publicvoidsetName(Stringname){ this.name=name; }
publicString[]getArr(){ returnarr; }
publicvoidsetArr(String[]arr){ this.arr=arr; }
}