反射(4)--Field类

来源:互联网 发布:mac windows 无法启动 编辑:程序博客网 时间:2024/05/17 04:15

获取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字段设置值为"陈锋"

0 0
原创粉丝点击