版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36255237/article/details/79438217
需要用到的类: Field
需要用到的方法:
getDeclaredField();
getField();
setAccessible();
需要用到的字段:
public int a=5;
public final int b=5;
private final int c=5;
private static final Integer d=5;
private static final int e=5;
修改字段的值时,需要根据字段的访问限制来更改访问权限。
以下是修改a和b的代码:
ClassB classB=new ClassB();
Field field = ClassB.class.getField("a");
System.out.println(field.get(classB));
field.setInt(classB,10);
System.out.println(field.get(classB));
结果如下:
以下是修改c的代码:
ClassB classB=new ClassB();
Field field = ClassB.class.getDeclaredField("c");
field.setAccessible(true);
System.out.println(field.get(classB));
field.setInt(classB,10);
System.out.println(field.get(classB));
结果如下:
以下是修改d的代码:
public static void main(String[] args)throws Exception {
ClassB classB=new ClassB();
Field field = ClassB.class.getDeclaredField("d");
field.setAccessible(true);//设置权限
classB.print();
//静态常量不能修改,如果要修改的话需要通过以下步骤去除final的影响。
Field field2 = Field.class.getDeclaredField("modifiers");
field2.setAccessible(true);
field2.setInt(field, 10);
field.set(null, 10);
classB.print();
}
结果如下:
在修改e时,用上边的代码进行修改时,发现并不能更改字段的值,这是因为它在修改静态常量的时候有局限性,并不能修改基本数据类型,仅能修改封装类。
结果如下:
在获取公有字段时,我们只需要使用getField()方法就可以了。
在获取私有字段时,我们需要使用getDeclaredField()方法才可以。
并且在更改私有字段时,我们需要调用setAccessible()方法。
true是代表不检查,false是代表检查。检查的是访问权限。