java反射例子

一、field.setAccessible()方法:

  setAccessible方法是干什么用的呢让我们来看一段代码吧:

public class User {
    private String name;
    
    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    
}
import java.lang.reflect.Field;

public class Demo {
    public static void main(String[] args) throws Exception {
        Class clazz = User.class;
        User u = new User("小明");
        for(Field field: clazz.getDeclaredFields()){
            System.out.println(field.isAccessible());    //这里的结果是false
            field.setAccessible(true);
            System.out.println(field.getName() + ":" + field.get(u));
        }
    }
}

通过运行以上代码,我们发现  System.out.println(f.isAccessible())这一句打印结果是"false",从字面上理解是说该字段不能被访问

如果不写field.setAccessible(true);会抛出异常;

经过检查发现getName()这个方法并不抛异常,也就是是就算没有加f.setAccessible(true);也可以获得name,抛异常的是f.get(u);这句话

结论:当isAccessible()的结果是false时不允许通过反射访问该字段

当该字段时private修饰时isAccessible()得到的值是false,必须要改成true才可以访问

所以     f.setAccessible(true);得作用就是让我们在用反射时访问私有变量

上面最后的打印:

false
name:小明

二、

------------

原文地址:https://www.cnblogs.com/tenWood/p/8596993.html