zoukankan      html  css  js  c++  java
  • 使用反射操作私有(Private)方法和属性

    1.操作私有方法:

    这是一个包含私有方法的类Private:

    public class Private
    {
    private String sayHello(String name)
    {
    return "hello: " + name;
    }
    }

    在另一个类TestPrivate中调用Private中的私有方法sayHello():

    public class TestPrivate
    {
    public static void main(String[] args) throws Exception
    {
    Private p = new Private();

    Class<?> classType = p.getClass();

    //getDeclaredMethod与getMethod方法不同,getDeclaredMethod返回所有声明的变量,
    //getMethod只返回public变量.
    Method method = classType.getDeclaredMethod("sayHello",
    new Class[] { String.class });

    method.setAccessible(true);//压制Java的访问控制检查

    String str = (String)method.invoke(p, new Object[]{"zhangsan"});

    System.out.println(str);
    }
    }


    输出结果:hello: zhangsan

    2.操作私有属性

    这是一个包含私有属性的类Private1:

    public class Private1
    {
    private String name = "zhangsan";

    public String getName(){
    return name;
    }
    }

    在另一个类TestPrivate1中修改Private中的私有属性name:

    public class TestPrivate1
    {
    public static void main(String[] args) throws Exception
    {
    Private1 p = new Private1();

    Class<?> classType = p.getClass();

    //getDeclaredField与getField的差异同getDeclaredMethod与getMethod
    Field field = classType.getDeclaredField("name");

    field.setAccessible(true);//压制Java对访问修饰符的检查

    field.set(p, "lisi");

    System.out.println(p.getName());
    }
    }


    输出结果为:lisi

    本文为<北京圣思园Java培训教学视频Java.SE 反射机制大总结>视频笔记

  • 相关阅读:
    Java事务管理学习一 JDBC的事务控制
    grafana监控配置
    Linux系统上传公钥不生效问题
    CentOS 定时计划任务设置
    shell脚本加密
    aotocomplete
    aotocomplete1
    浮动
    http://lifesinger.org/blog/2009/07/kissysuggest/
    dataTable转换成Json格式
  • 原文地址:https://www.cnblogs.com/myfjd/p/2322083.html
Copyright © 2011-2022 走看看