Java反射获取字段、设置字段以及获取字段的值

Java反射获取字段、设置字段以及获取字段的值

获取字段

1.先找到字段所在类的字节码

2.找到需要被获取的字段

Class类中获取字段:

public Field[] getFields();//获取包括自身和继承(实现)过来的所有的public字段——Field不支持泛型<>,即后面不接<>

public Field[] getDeclaredFields();//获取自身所有的字段(private、public、protected,和访问权限无关),不包括继承的

public Field[] getField(String fieldlName);//表示获取指定的一个公共的字段,包括继承的

public Field[] getDeclaredField(String fieldlName);//表示获取本类中的一个指定的字段(private、protected、public,与访问权限无关),不包括继承的字段

要想获取父类中的私有字段,需要先获取父类的字节码,在获取父类的字段

Class clz=User.class;

Class sc=clz.SuperClass;

给某个类中的字段设置值和获取值

1.找到被操作的字段所在的类的字节码

2.获取该被操作的字段对象

3.设置值/获取值

Eg:

class User{

private String name;

private int age;

}

Class<User>  clz=User.class;

Field age=clz.getDeclaredField(“age”);

设置值之前,需要设置可访问权限

Field类中:

public Void  setXXX(Object obj, XXX value);//为基本类型字段设置值,XXX表示基本数据类型

public Void  set(Object obj, Object value);//为引用类型字段设置值

参数:

  obj: 表示字段底层所属对象(字段为实例变量,则属于一个实例对象);若该字段是static的,该值可以设置为null,或者任意一个该类的对象

  value:表示将于为字段设置的值

age.setAccessible(true);

Object obj=clz.newInstance();

age.setInt(obj, 17);

 

获取字段的值

获取值之前,需要设置可访问权限

Field类中:

public XXX getXXX(Object obj);//获取基本类型字段的值,XXX表示基本数据类型

public Object get(Object obj);//获取引用类型字段设置值

参数:

  obj: 表示字段底层所属对象(字段为实例变量,则属于一个实例对象);若该字段是static的,该值可以设置为null,或者任意一个该类的对象

 返回:该字段的值

Class<User>  clz=User.class;

Field ageField=clz.getDeclaredField(“age”);

ageField.setAccessible(true);

Object obj=clz.newInstance();

ageField.setInt(obj, 17);

int ageValue=ageField.getInt(obj);

Field nameField=clz.getDeclaredField(“name”);

nameField.setAccessible(true);

Object nameObj=nameField.get(obj);

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值