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