反射在设计框架中使用,解决读取配置文件中,无法直接new类名的问题,如给定 java.util.String 类,如读取时只能读取这段字符的String型,无法用new加载(new "java.util.String"语法错误)。反射效率会低于直接实例化
反射类的构造函数
Class clas = Class.forName("cn.xx.xx.xx");加载到内存
Constructor c = clas.getConstructor(String.class); Constructor c = new .getConstructor(String.class,int.class) 加载构造函数。
(ex: person(String name) person(String name, int age) )
Person p = (Person) c.getInstance("xxxx",12);实例化
clas.getDeclaredConstructor(String.class) 加载私有构造函数
c.setAccessible(true); 暴力反射, 读取所有权限
反射类的方法
Method method = clas.getMethod("xx",null);加载反射方法
method.invoke(obj,null); 传执行这个方法的对象
getDeclaredMethod("xx",null);加载私有方法
method.setAccessible(true);暴力反射
反射main方法
Method method = clas.getMethod(",main",String[].class);反射main方法
method.invoke(null,(Object)new String[]{"aa","bb"});//要强转Object,因为在数组反射处理上sun有些小问题。
反射字段
//;Person p = new Person;
// String name =="aaa"
Field f = clas.getField("name");
String name = (String)f.get(p);
// 通过反射字段还可知道类型
Class type = f.getType(); // type = String
f.set(p,"xxxxx");//设置字段的值
私有字段同上。