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

  • 相关阅读:
    FFmpeg入门,简单播放器
    Linux系统编译Win32版本adb
    检测目标程序ELF bit是32还是64
    Swift编程资料全集
    Swift编程资料总结
    cocos2d-html5学习之三-为sprite添加触摸事件
    Cocos2d-html5学习笔记二
    cocos2d-x学习笔记一
    NSViewAnimation进行视图和窗口动画
    Cocoa中NSAnimation动画简介
  • 原文地址:https://www.cnblogs.com/myfjd/p/2322083.html
Copyright © 2020-2023  润新知