JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能:
1.在运行时判断任意一个对象所属的类;
2.在运行时构造任意一个类的对象;
3.在运行时判断任意一个类所具有的成员变量和方法;
Java反射机制主要提供了以下功能:
1.在运行时判断任意一个对象所属的类;
2.在运行时构造任意一个类的对象;
3.在运行时判断任意一个类所具有的成员变量和方法;
4.在运行时调用任意一个对象的方法;生成动态代理。
Person.java
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
Test.java
public class Test{
public static void main(String[] args) throws Exception {
Person p = new Person("test", 20);
// System.out.println(getFieldValue(p, "name"));
System.out.println(getDeclaredFieldValue(p, "name"));
}
/**
* 获取 public 类型属性,如果属性为 private 会报错:
* java.lang.NoSuchFieldException: name
*/
public static Object getFieldValue(Object tar, String filedName) throws Exception {
Class clazz = tar.getClass();
Field field = clazz.getField(filedName);
Object value = field.get(tar);
return value;
}
/**
* 获取 任意类型 属性,只要此属性存在即可
*/
public static Object getDeclaredFieldValue(Object tar, String filedName) throws Exception {
Class clazz = tar.getClass();
Field field = clazz.getDeclaredField(filedName);
// 设置此属性可以获取
field.setAccessible(true);
Object value = field.get(tar);
return value;
}
}