一.反射的理解
反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。总结说:反射就是把java类中的各种成分映射成一个个的Java对象,并且可以进行操作。
学习反射之前,先了解一下Java类的执行过程如下图:
加载过程.jpg
Java的反射就是利用上面第二步加载到jvm中的.class文件来进行操作的。.class文件中包含java类的所有信息,当你不知道某个类具体信息时,可以使用反射获取class,然后进行各种操作。
二.使用反射时获取Class对象的方式
1)使用getClass()
Simple s=new Simple();
Class c = s.getClass();
- 类名.class 的方式得到,该方法最为安全可靠,程序性能更高
Class classz=Simple.class;
3)通过 Class 对象的 forName() 静态方法来获取,用的最多
Class c= Class.forName("com.tst.Simple");
三反射的简单实现
public class Simple{
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value= value;
}
public static void main(String[] args) throws Exception{
//正常的调用
Simple s= new Simple();
s.setPrice(5);
System.out.println("Simple Value:" + s.getPrice());
//使用反射调用
Class clz = Simple.class;
Method m= clz.getMethod("setValue", int.class);
Constructor simpleConstructor = clz.getConstructor();
Object simpleObj = simpleConstructor .newInstance();
m.invoke(simpleObj , 14);
Method m2= clz.getMethod("getValue");
System.out.println("Simple value:" + m2.invoke(simpleObj));
}
}