需要用到的类: 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是代表检查。检查的是访问权限。
版权声明:本文为qq_36255237原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。