reflect是Java开发语言特征之一,在lang包下;它允许运行中的Java程序对自身进行检测。并能直接操作程序内部的属性。
import java.lang.reflect.Field;
public class extendsTest {
public static void main(String[] args) throws Exception{
//四种获得Class的方法
Class clazz = java.lang.String.class;
Class clazz2 = Class.forName("java.lang.String");
Class clazz3 = Parent.class.getClass();
Class clazz4 = Integer.TYPE;
//1. 获得Class对象 2.对象操作
Class clazzParent = Parent.class;
Parent parent = new Parent();
Field field = clazzParent.getDeclaredField("name");
field.setAccessible(true); //取消安全检查
field.set(parent, "李四");
System.out.println(parent.getName());
}
}
class Parent{
private String name="张三";
public String getName(){
return this.name;
}
}
reflect允许在程序创建和控制人和对象(根据安全性,可以忽略安全性:setAccessible(true)),无需提前编码目标对象。在存储对象数据库中、XML、及外部框架比较常用。
reflect 两个缺点:(1) 性能上比实际编写的代码要慢 (2) 使用反射会模糊实际代码内部要发生的事情
更多相关反射知识参考:http://wenku.baidu.com/view/472725fff705cc17552709f3.html