当前位置: 首页 > news >正文

第二百一十四节 Java反射 - Java反射字段访问

Java反射 - Java反射字段访问

我们可以使用反射在两个步骤中获取或设置字段。

  • 获取字段的引用。
  • 要读取字段的值,请在字段上调用getXxx()方法,其中Xxx是字段的数据类型。
  • 要设置字段的值,请调用相应的setXxx()方法。

以相同的方式访问静态和实例字段。

例子

import java.lang.reflect.Field;class MyClass {public String name = "Unknown";public MyClass() {}public String toString() {return "name=" + this.name;}
}
public class Main {public static void main(String[] args) {Class<MyClass> ppClass = MyClass.class;try {MyClass p = ppClass.newInstance();Field name = ppClass.getField("name");String nameValue = (String) name.get(p);System.out.println("Current name is " + nameValue);name.set(p, "abc");nameValue = (String) name.get(p);System.out.println("New  name is " + nameValue);} catch (InstantiationException | IllegalAccessException| NoSuchFieldException | SecurityException | IllegalArgumentException e) {System.out.println(e.getMessage());}}
}

上面的代码生成以下结果。

绕过辅助功能检查

使用反射访问类的非可访问字段,方法和构造函数从 AccessibleObject 类调用 setAccessible(boolean flag)方法。

我们需要使用true参数调用此方法,以使该字段,方法和构造函数可访问。

import java.lang.reflect.Field;class MyClass {private String name = "Unknown";public MyClass() {}public String toString() {return "name=" + this.name;}
}public class Main {public static void main(String[] args) {Class<MyClass> my = MyClass.class;try {MyClass p = my.newInstance();Field nameField = my.getDeclaredField("name");nameField.setAccessible(true);String nameValue = (String) nameField.get(p);System.out.println("Current name is " + nameValue);nameField.set(p, "abc");nameValue = (String) nameField.get(p);System.out.println("New name is " + nameValue);} catch (InstantiationException | IllegalAccessException| NoSuchFieldException | SecurityException | IllegalArgumentException e) {System.out.println(e.getMessage());}}
}

上面的代码生成以下结果。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • DAY69
  • Gartner《2024中国安全技术成熟度曲线》AI安全助手代表性产品:开发者安全助手D10
  • 启动 Spring Boot 项目时指定特定的 application.yml 文件位置
  • APS开源源码解读: 排程工具 optaplanner
  • 洛阳3天攻略
  • Aloudata AIR :国内首个 Data Fabric 逻辑数据平台
  • platform框架
  • Ansible中的角色管理:如何组织和重用自动化任务
  • 项目依赖拉不下来卡着不动怎么办,node又不支持cnpm
  • SD-WAN,是干嘛的?
  • 五、Selenium操作指南(二)
  • 9月SCI/SSCI/EI最新期刊一览!二区SCI仅2个月录用,晋升/结项稳了!
  • ffmpeg音视频开发从入门到精通——常用结构体介绍(一)
  • session机制
  • TikTok直播为什么要用独立IP
  • 【React系列】如何构建React应用程序
  • angular2 简述
  • co.js - 让异步代码同步化
  • CSS居中完全指南——构建CSS居中决策树
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • iOS 颜色设置看我就够了
  • Java知识点总结(JavaIO-打印流)
  • mysql常用命令汇总
  • MySQL主从复制读写分离及奇怪的问题
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • spring boot下thymeleaf全局静态变量配置
  • 二维平面内的碰撞检测【一】
  • 分享一份非常强势的Android面试题
  • 解析 Webpack中import、require、按需加载的执行过程
  • 盘点那些不知名却常用的 Git 操作
  • 批量截取pdf文件
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 一个JAVA程序员成长之路分享
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 云大使推广中的常见热门问题
  • Java性能优化之JVM GC(垃圾回收机制)
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​比特币大跌的 2 个原因
  • #VERDI# 关于如何查看FSM状态机的方法
  • (1)svelte 教程:hello world
  • (2)(2.10) LTM telemetry
  • (30)数组元素和与数字和的绝对差
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (力扣)循环队列的实现与详解(C语言)
  • (三)终结任务
  • (十) 初识 Docker file
  • (五)MySQL的备份及恢复
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)Linux+Windows下安装ffmpeg
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (自适应手机端)行业协会机构网站模板