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 反射机制大总结>视频笔记

  • 相关阅读:
    sqlzoo练习答案--SUM and COUNT
    响应式的嵌入内容和图片
    缓存server设计与实现(五)
    编译器DIY——读文件
    [Leetcode]-Pascal&#39;s Triangle
    zoj 1562 反素数 附上个人对反素数性质的证明
    [POJ 1236][IOI 1996]Network of Schools
    POJ 3691 DNA repair [AC自动机 DP]
    POJ 1625 Censored! [AC自动机 高精度]
    51Nod 1225 余数之和 [整除分块]
  • 原文地址:https://www.cnblogs.com/myfjd/p/2322083.html
Copyright © 2011-2022 走看看