转载请注明出处:http://blog.csdn.net/yianemail/article/details/46840927
反射(Reflection)是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。
对于任意一个类,都可以知道该类的所有属性和方法,对于任意一个对象,都可以调用它的任意一个方法,这栋动态获取类信息以及动态调用对象的方法的功能称为java语言的反射机制。
一:反射机制的用途:
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法
二:反射的前传:类类型 Class Class
Java中有一个很特殊的类,即 Class类,可以把它简单理解为该类封装了某类的该类信息。如果我们拿到了某个类的类型信息,就可以利用反射获取其成员变量以及成员方法了。也就是说, 我们要对某类作反射操作,要先拿到该类的Class信息。
获得某类类信息有几种方法:
//获得类类型的两种方式三:反射的操作
Class cls1 = Role.class;
Class cls2 = Class.forName("该类的类全名");
1,通过反射获取某个类的所有的成员属性,
- public Field getDeclaredField(String name) 获取任意指定名字的成员
- public Field[] getDeclaredFields() 获取所有的成员变量
- public Field getField(String name) 获取任意public成员变量
- public Field[] getFields() 获取所有的public成员变量
来看例子代码,类test,
public class Test {
//两个成员变量
private Stringname;
private Stringpassword;
//一个成员方法
public String getInfo(String test) {
return test;//返回传入的参数值
}
}
编写测试类,我们在主类main中获取类Test的两个成员属性:
2,通过反射执行类Test的某个成员方法
- public Method[] getMethods() 获取所有的共有方法的集合
- public Method getMethod(String name,Class<?>... parameterTypes) 获取指定公有方法 参数1:方法名 参数2:参数类型集合
- public Method[] getDeclaredMethods() 获取所有的方法
- public Method getDeclaredMethod(String name,Class<?>... parameterTypes) 获取任意指定方法
public String getInfo(String test) {
return test;//返回传入的参数值
}
四:关于反射的一些总结
使用反射。一般遵循以下三步:
1,获得你想操作类的Class对象
2,通Class对象去去的该类的属性或方法
3,进行操作