zoukankan      html  css  js  c++  java
  • 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:小明

    二、

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

  • 相关阅读:
    filter
    列表生成式
    迭代
    切片:练习
    Python FAQ
    活在深圳
    “30岁年薪20万算不算很失败?”人民日报这样回答
    ASP.NET Core 运行原理解剖[1]:Hosting
    Kotlin 初窥门径[2]:流程控制
    Kotlin 初窥门径[1]:基础概念
  • 原文地址:https://www.cnblogs.com/tenWood/p/8596993.html
Copyright © 2011-2022 走看看