java反射中如何改变private中的变量及方法呢?

java问题王 Java每日一问 发布时间:2021-10-27 06:05:42 阅读数:8017 1
下文笔者将讲述使用Java代码修改类中private中的变量及方法的示例,
通过对此示例的学习,大家可以了解到反射修改private变量的方法,如下所示:

定义一个类

class TestClass{
 private String name="java265.com";
 public getName(){
  system.out.println("public getName " + name);
  return name;
 }
 private getName2(){
  system.out.println("private getName2 " + name);
  return name;
 }

 public TestClass(){}
}
如果我们需name的值,可以使用一下方法
//未修改前的name值
class<TestClass> calzz=TestClass.class;
//获取其构造方法
Constructor cons=clazz.getConstructor(new class[]{});
//实例化对象 
TestClass test=(DemoTest)cons.newInstance(); 
//运行getName方法 
Method method=clazz.getMethod("getName",new Class[]{String.class});
method.invoke(test);
//打印出 java265.com
-------------------------------------------------------------------------
此时修改name值的方法,如下所示: 
//获取field
Field field=clazz.getDeclaredField("name");
//将此对象accessible的值设置为true 
//此种设置为调整java语言的访问性检查
field.setAccessible(true);
//修改变量值
field.set("name","我的最爱");

//测试修改值是否成功
Method method=clazz.getDeclaredMethod("getName2");
method.setAccessible(true);
method.invoke(test);
//打印出 我的最爱
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaProblem/202110/1580.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者