457. Java 反射 - 深度访问

发布时间:2026/10/14 4:49:22
457. Java 反射 - 深度访问 文章目录457. Java 反射 - 深度访问1. 深度访问示例修改私有字段2. 深度反射与 Java 模块系统3. 总结457. Java 反射 - 深度访问到目前为止我们看到的都是安全的反射操作获取公共方法调用静态方法调用接口方法这些方法没有真正突破 Java 的访问控制唯一“危险”的地方是编译器无法保证方法存在或可访问。现在我们要尝试深入镜子操作私有字段和不可见的成员。1. 深度访问示例修改私有字段假设我们有一个简单的Person类publicclassPerson{privatefinalStringname;privatefinalintage;publicPerson(Stringname,intage){this.namename;this.ageage;}OverridepublicStringtoString(){returnname (age);}}我们想通过 Reflection修改私有且final的字段importjava.lang.reflect.Field;publicclassFountainOfYouth{publicstaticvoidmain(String[]args)throwsReflectiveOperationException{PersonpersonnewPerson(Heinz Kabutz,51);System.out.println(person);// 获取私有字段FieldageFieldPerson.class.getDeclaredField(age);ageField.setAccessible(true);// ⚠ 开启深度反射// 修改字段值intage(int)ageField.get(person);age*0.9;// 年轻 10%ageField.set(person,age);System.out.println(person);}}输出示例HeinzKabutz(51)HeinzKabutz(45)✅说明虽然age字段是private final但通过深度反射我们仍然可以修改它如果Person是record则无法通过深度反射修改字段2. 深度反射与 Java 模块系统在 Java 9 之后引入了模块系统Module System深度反射只有在模块开放的情况下才可用理想情况下应请求模块作者开放包给你的模块否则你可能需要通过--add-opens命令行参数强行打开包不推荐⚠风险提示深度反射可能破坏封装模块升级或字段更改可能导致反射代码崩溃仅在绝对必要时使用3. 总结浅层反射访问公共方法、调用静态方法安全、常用深度反射访问私有、final字段和方法危险且不推荐模块与安全深度反射受模块访问限制不要随意依赖模块内部实现细节

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询