• 使用反射操作私有(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 反射机制大总结>视频笔记

  • 相关阅读:
    FileAttributes枚举
    File类与FileInfo类
    System.IO.Path类
    会话状态Session
    Application共享数据
    压缩、解压缩流GZipStream
    MemoryStream类
    FileMode枚举
    FileAccess枚举
    MySQL函数
  • 原文地址:https://www.cnblogs.com/myfjd/p/2322083.html
Copyright © 2020-2023  润新知