反射心得

来源:互联网 发布:java并发书籍 编辑:程序博客网 时间:2024/05/17 02:48
//获取反射字节码文件Class c=Class.forName("test.Person");//获取带参构造对象Constructor con = c.getConstructor(String.class,int.class,String.class);//通过带参的构造方法创建对象Object obj = con.newInstance("林青霞",27,"北京");System.out.println(obj);

/** * 通过反射获取成员变量并使用 *  * private Person(String name){ super(); this.name=name; } *  * Person p=new Person("大雨"); System.out.println(p); */public class FanseDemo4 {public static void main(String[] args) throws Exception {// 获取反射字节码文件Class c = Class.forName("test.Person");// 获取取成员变量并使用// //这个getDeclaredFields是获取所有的成员变量// Field[] fields = c.getDeclaredFields();// 这个getFields是获取public的成员变量/* * Field[] fields = c.getFields(); for (Field field : fields) { * System.out.println(field); } */// 获取单个成员变量// adrress并对他赋值// 获取无惨构造对象Constructor con = c.getConstructor();// 通过无参的构造方法创建对象Object obj = con.newInstance();// System.out.println(obj);Field fieldadrress = c.getField("adrress");/** * 反射,今天有点类型adrress.p public void set(Object obj, Object value) throws * IllegalArgumentException, IllegalAccessException将指定对象变量上此 Field * 对象表示的字段设置为指定的新值。 如果底层字段的类型为基本类型,则对新值进行自动解包 adrress.p(北京) * 给obj(是Person的对象)的对象的字段fieldadrress设置为北京 */fieldadrress.set(obj, "北京");// System.out.println(obj);// 没有找到这个方法 java.lang.NoSuchFieldException说明我们的name是私有的// java.lang.IllegalAccessException非法的访问异常,所以要暴力访问//Field fieldadrress1 = c.getDeclaredField("name");fieldadrress1.setAccessible(true);fieldadrress1.set(obj, "大雨");System.out.println(obj);


0 0