获取Field类
通过Class类的以下方法,我们可以获得构造器。
l public Field [] getFields ():所有公共成员变量
l public Field [] getDeclaredFields():所有成员变量
l public FieldgetField(String name):获取单个公共成员变量,name
参数是一个 String
,用于指定所需字段的简称。
// 获取字节码文件对象
Class c =Class.forName("cn.itcast_01.Person");
// 获取address并对其赋值
Field addressField = c.getField("address");
// 通过无参构造方法创建对象
Constructor con =c.getConstructor();
Object obj =con.newInstance();
addressField.set(obj,"北京"); // 给obj对象的addressField字段设置值为"北京"
l public FieldgetDeclaredField(String name):获取单个成员变量(能获取私有的,但要用Field类的setAccessible方法设置访问权限),name 参数是一个 String,它指定所需字段的简称。注意,此方法不反映数组类的 length 字段。
// 获取字节码文件对象
Class c = Class.forName("cn.itcast_01.Person");
// 获取name并对其赋值
Field nameField = c. getDeclaredField ("name");
// 通过无参构造方法创建对象
Constructor con =c.getConstructor();
Object obj =con.newInstance();
nameField.setAccessible(true);
nameField.set(obj,"陈锋"); // 给obj对象的nameField字段设置值为"陈锋"
Field类的常用方法
l public void setAccessible(boolean flag):值为true则指示反射的对象在使用时应该取消Java语言访问检查。
l public void set(Object obj, Object value):将obj对象变量上此 Field
对象表示的字段设置为指定的值value。
// 获取字节码文件对象
Class c =Class.forName("cn.itcast_01.Person");
// 获取name并对其赋值
Field nameField = c. getDeclaredField ("name");
// 通过无参构造方法创建对象
Constructor con =c.getConstructor();
Object obj =con.newInstance();
nameField.setAccessible(true);
nameField.set(obj,"陈锋"); // 给obj对象的nameField字段设置值为"陈锋"