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

news2024/11/15 3:25:10

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());
    }
  }
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CCF-CSP 2024 --重塑矩阵1,2c语言题解

创作想法是因为像我当初大一时候想参加一些比赛但是奈何只学了c和c相关数据结构&#xff0c;但是对于许多竞赛的题目的题解往往都是c或者其他面向对象的编程语言&#xff0c;让我们难以在c语言基础上入手这些比较复杂的题目。 创造的目的是为了帮助各位同时提高我对c语言编程的…

vue2-elementUI-初始化启动项目-git

前置基础 资料下载-阿里云盘 vueaxioselement-uinpmvscode 初始化项目 1.创建vue2工程 1.1 vue create projectName1.2 选择 1.3 初始化 vue-cli 的核心步骤&#xff1a; Manually select features (*) Babel ( ) TypeScript ( ) Progressive Web App (PWA) Support …

计算机毕业设计选题推荐-企业会议室管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Java企业电子招投标系统:Spring Cloud微服务架构-强化企业招采竞争力:电子化招投标平台助力效率与成本控制-支持二次开发

​在当今激烈的市场竞争环境下&#xff0c;企业规模的持续扩大使得招采管理变得日益重要&#xff0c;已成为企业提升核心竞争力的关键一环。为了实现更高效、更高质量的招采成果&#xff0c;我们设计了一套基于电子化平台的解决方案&#xff0c;旨在通过电子化招投标系统&#…

HarmonyOS开发实战( Beta5版)状态管理优秀实践

为了帮助应用程序开发人员提高其应用程序质量&#xff0c;特别是在高效的状态管理方面。本章节面向开发者提供了多个在开发ArkUI应用中常见的低效开发的场景&#xff0c;并给出了对应的解决方案。此外&#xff0c;还提供了同一场景下&#xff0c;推荐用法和不推荐用法的对比和解…

STM32 HAL CAN (TJA1050CAN模块) 通讯(一)理论

1、简介 CAN具备多个设备交互的能力,但是网上大多是两个单片机进行交互,或者单片机通过CAN收发器与上位机进行交互测试,本次通过STM32cubeMX完成CAN通讯配置,并通过多个单片机进行数据交互测试。 2、CAN简介 CAN是一种串行通讯协议,主要有低速、高速CAN两种。 低速CAN…

bug“医典”

温馨提示&#xff1a;本篇文章主要用于收藏博主所遇到的各种bug,并且不定期更新 未初始化 “病状” “处方” 在需要的位置进行初始化即可 数组越界 “病状” “处方” 修改原理&#xff1a;越界通常是下标或者指针因为没有合适的控制&#xff0c;导致其走出了边界&#xf…

5G速度救援加速:工业边缘网关为智慧消防赢得每一秒!

项目背景 近年来&#xff0c;火灾频发&#xff0c;面对火灾的不可预测性和潜在的巨大破坏力&#xff0c;传统防控手段显得力不从心。 在《关于全面推进“智慧消防”建设的指导意见》等国家政策的积极推动下&#xff0c;智慧消防系统有效预防火灾发生和提高火灾扑救效率&#x…

美股、日本和韩国股市大跌,“黑色星期一”将重现?

KlipC报道&#xff1a;9月开始&#xff0c;全球市场再度迎来大跌。美东时间9月3日&#xff0c;美股三大指数全线大跌&#xff1b;9月4日&#xff0c;日本和韩国股市也出现大跌。市场对AI的乐观情绪减弱&#xff0c;英伟达股价在9月3日暴跌9.5%&#xff0c;市值缩水2790亿美元。…

睡岗检测数据集(工作 课堂等) 3100张 增强 睡岗趴睡 带标注 voc yolo

睡岗检测是一项重要的安全监测任务&#xff0c;尤其是在需要高度警觉的工作环境中。该数据集旨在为研究人员和开发者提供一个高质量的、可用于训练和评估睡岗检测模型的数据集。 数据集特点 类型&#xff1a;睡岗检测图像数据集。规模&#xff1a;包含3100张图像&#xff0c;…

zblog自动生成文章插件(百度AI写作配图,图文并茂)

最近工作比较忙&#xff0c;导致自己的几个网站都无法手动更新&#xff0c;于是乎也想偷个懒把&#xff0c;让AI帮忙打理下自己的网站。我接触chatgpt等AI工具还是比较早了&#xff0c;从openai推出gpt3.5就一直在用&#xff0c;说实话&#xff0c;开始的时候用AI自动更新网站还…

高通智能模组:以卓越优势引领科技潮流

一、高通智能模组的崛起与发展 在通信技术发展中&#xff0c;高通智能模组出现。5G 兴起&#xff0c;对模组有更高要求&#xff0c;高通凭借积累和创新捕捉需求。早期致力于研发 5G 技术&#xff0c;优化技术降低功耗提高处理能力&#xff0c;展现性能优势。在竞争中&#xff0…

redis通用命令

TOC 目录 特性&#xff08;优点&#xff09; 存储方式 功能丰富 客户端语言多 数据存储位置 支持集群 支持主从复制 速度快 应用场景 数据库 排行榜系统 计数器应用 消息队列系统 redis客户端 基本全局命令 Keys EXISTS DEL EX…

版权与开源协议:一场创新与自由的边界之争

在数字时代的浪潮中&#xff0c;版权与开源协议作为知识产权领域的两大支柱&#xff0c;既相互依存又暗自较劲&#xff0c;共同绘制着科技创新的宏伟蓝图。本文将带您深入这场创新与自由的边界之争&#xff0c;探讨版权与开源协议之间的微妙关系&#xff0c;以及它们如何共同推…

【JAVA数据结构】(ArrayList)顺序表

ArrayList 是Java集合框架中的一个类&#xff0c;底层使用的数据结构就是顺序表&#xff0c;它实现了List接口&#xff0c;提供了动态数组的功能&#xff0c;ArrayList可以根据需要自动进行扩容&#xff08;不指定容量大小也能正常添加元素&#xff09;&#xff0c;允许存储任意…

城市智能厕所改造:让公厕智能化、信息化

在现代城市的发展进程中&#xff0c;城市智能厕所改造成为提升公共服务水平和城市品质的重要举措。让我们一同探讨城市智能厕所的智能化、信息化体现以及其重大意义。 一、城市智能厕所智能化体现 1. 智能引导系统&#xff1a;入口处的电子显示屏实时显示厕位使用情况&#xff…

赚多多V10自动任务网抢单源码-会员自营版

赚多多V10自动任务网抢单源码 会员自营版搭建视频教程 测试了一下&#xff0c;源码非常完整&#xff0c;短信对接的是云之讯&#xff0c;有喜欢的拿去研究&#xff0c;感谢大家对本站的支持 环境&#xff1a;Apache 2.4.46 mysql5.6 php7.2 注&#xff1a;压缩包内含搭建文…

分析多种解决vcruntime140_1.dll无法继续执行代码的方法,简单的修复手段分享

在使用电脑上的某些程序时遇到“无法继续执行代码&#xff0c;因为 vcruntime140_1.dll 找不到”或者该 DLL 文件损坏的错误消息&#xff0c;您需要采取一些措施来解决这个问题。这类问题通常是由于系统文件缺失或损坏引起的&#xff0c;但有多种方法可以帮助您解决这个问题并保…

靶场战神为何会陨落?

我从第一个SQL注入漏洞原理学起,从sql-libas到DVWA,到pikachu再到breach系列,DC系列靶场,再到实战挖洞,发现靶场与实战的区别是极其大的。 我个人觉得在这种web环境下,难的不是怎么测一个漏洞点,而是怎么找一个漏洞点。靶场与实战最大的区别在于你不知道这个地方到底有没有漏洞…

什么是场外个股期权?带大家一篇文章了解!

今天带你了解什么是场外个股期权&#xff1f;带大家一篇文章了解&#xff01;场外个股期权是指不在正式的交易所内&#xff0c;而是在场外市场通过双方直接协商的方式进行交易的个股期权。这种期权允许买卖双方根据自身的需求和风险偏好定制期权的条款&#xff0c;如行权价格、…