zoukankan      html  css  js  c++  java
  • java反射访问private属性和方法

    Private类中有私用成员变量和私有方法,正常情况下外部类是无法访问私有方法和改变私有成员变量的值

    public class Private {

        private String names = "zs";
        private String sayHello(String name){
            return "say:"+name;
        }
        
        public String getNames(){
            return names;
        }
    }

    通过反射可实现对私有方法的访问和改变私有成员变量的值

    import java.lang.reflect.Field;
    import java.lang.reflect.Method;

    public class TestPrivate01 {

        public static void main(String[] args) throws Exception {
            Private p = new Private();
            //Private p2 = new Private();
            //System.out.println(p.getClass()==p2.getClass());
            Class<?> classType = p.getClass();
            
            Method privatemethod = classType.getDeclaredMethod("sayHello", new Class[]{String.class});
            Field field = classType.getDeclaredField("names");
            //将访问权限控制检查压制(suppress)
            privatemethod.setAccessible(true);
            field.setAccessible(true);
            
            field.set(p, "ls");
            System.out.println(privatemethod.invoke(p, new Object[]{"Hello"}));
            System.out.println(p.getNames());    
        }
    }

  • 相关阅读:
    Flask基础
    Scrapy框架(持久化,去重,深度控制,cookie)
    scrapy框架 简易整理
    BeautifulSoup 模块
    requests模块
    复习第三天
    在Django中使用原生Sql
    ajax跨域简单请求和复杂请求
    复习第二天
    IOS
  • 原文地址:https://www.cnblogs.com/charleszhang1988/p/3051421.html
Copyright © 2011-2022 走看看