Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。
当然,平时我们在项目中使用的机率比较小,一般是用在框架上的,从而使扩展性更强。下面我们就简单写一个例子,来使用下。
public class TestMode {
private int age;
String name;
int length;
public TestMode(){
}
public TestMode(int age, String name, int length) {
this.age = age;
this.name = name;
this.length = length;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "TestMode{" +
"age=" + age +
", name='" + name + '\'' +
", length=" + length +
'}';
}
}
新建了一个java类,并且给这个类负值,然后通过反射机制获取。
TestMode testMode = new TestMode(30, "明", 170);
Class cla = testMode.getClass();
Field[] fields=cla.getDeclaredFields();
for (Field field:fields ) {
Object vl=field.getName();
try {
/**
* 设置field 访问私有权限
* 对所有属性设置访问权限 当类中的成员变量为private时 必须设置此项
*/
field.setAccessible(true);
Object obj=field.get(testMode);
System.out.println(field.getName());
System.out.println("value:"+obj);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
这样我们就可以通过反射来获取类中所有的方法 及函数值。
age
value:30
name
value:明
length
value:170
如果想更多了解可以参考这里:https://www.jianshu.com/p/9be58ee20dee,这篇写的比较全