Java反射(Reflection)是在运行时对于任意一个类,都能够了解这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。
Java反射机制主要提供了以下功能:
- 在运行时判断任意一个对象所属的类;
- 在运行时构造任意一个类的对象;
- 在运行时判断任意一个类所具有的成员变量和方法;
- 在运行时调用任意一个对象的方法;
- 生成动态代理。
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Class p = People.class; //得到People类 p
People pp = (People) p.newInstance(); //实例化People类,得到对象pp
Method m1 = p.getMethod("setName", String.class); //调用class类的getMethod
Method m2 = p.getMethod("setAge", int.class); //调用class类的getMethod
m1.invoke(pp, "名字"); //激活方法
m2.invoke(pp, 12); //激活方法
System.out.println(pp); //输出Peope对象pp到控制台
}
}
public class People {
private String name; //定义变量name
int age; //定义变量age
/*设置变量的set/get方法*/
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;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return name+":"+age;
}
}