Java反射机制-修改字段值

版权声明:本文为博主原创文章,未经博主允许不得转载。 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是代表检查。检查的是访问权限。



猜你喜欢

转载自blog.csdn.net/qq_36255237/article/details/79438217