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:小明

    二、

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

  • 相关阅读:
    第四章
    第三章随手笔记
    Android深度探索(卷1)HAL与驱动开发
    第十章心得体会
    第九章心得体会
    第八章心得体会
    第六章心得体会
    第七章心得体会
    第五章心得体会
    第四章心得体会
  • 原文地址:https://www.cnblogs.com/tenWood/p/8596993.html
Copyright © 2011-2022 走看看