java反射field.setAccessible()方法作用

2023-11-12

Accessable属性是继承自AccessibleObject 类. 功能是启用或禁用安全检查

JDK API中的解释

引用
AccessibleObject 类是 Field、Method 和 Constructor 对象的基类。它提供了将反射的对象标记为在使用时取消默认 Java 语言访问控制检查的能力。对于公共成员、默认(打包)访问成员、受保护成员和私有成员,在分别使用 Field、Method 或 Constructor 对象来设置或获得字段、调用方法,或者创建和初始化类的新实例的时候,会执行访问检查。
在反射对象中设置 accessible 标志允许具有足够特权的复杂应用程序(比如 Java Object Serialization 或其他持久性机制)以某种通常禁止使用的方式来操作对象。

//将此对象的 accessible 标志设置为指示的布尔值
public void setAccessible(boolean flag) throws SecurityException 

flag=true:指示反射的对象在使用时应该取消 Java 语言访问检查。flag=false:指示反射的对象应该实施 Java 语言访问检查。

实际上setAccessible是启用和禁用访问安全检查的开关,并不是为true就能访问,为false就不能访问,一般情况下,我们并不能对类的私有字段进行操作,利用反射也不例外,但有的时候,例如要序列化的时候,我们又必须有能力去处理这些字段,这时候,我们就需要调用AccessibleObject上的setAccessible()方法来允许这种访问,而由于反射类中的Field,Method和Constructor继承自AccessibleObject,因此,通过在这些类上调用setAccessible()方法,我们可以实现对这些字段的操作。但有的时候这将会成为一个安全隐患,为此,我们可以启用java.security.manager来判断程序是否具有调用setAccessible()的权限。默认情况下,内核API和扩展目录的代码具有该权限,而类路径或通过URLClassLoader加载的应用程序不拥有此权限。例如:当我们以这种方式来执行上述程序时将会抛出异常

java.lang.IllegalAccessException: Class com.example.xj.myapplication.TestField can not access a member of class com.example.xj.myapplication.Student with modifiers "private"
	at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
	at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:296)
	at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:288)
	at java.lang.reflect.Field.get(Field.java:390)
	at com.example.xj.myapplication.TestField.main(TestField.java:20)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

Student.class
获取变量:
Field field = student.getClass().getDeclaredField("phone");
field.setAccessible(true);
Object o = field.get(student);

获取方法:

Method method = student.getClass().getDeclaredMethod("getName",String.class);
Object object = method.invoke(student,"张三");
System.out.println("反射方法获取返回结果:" + object);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java反射field.setAccessible()方法作用 的相关文章

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • angular快速入门教程

    angular 安装 1 安装node js 2 安装angular npm i g angular cli 3 创建项目 ng new 项目名 4 文件结构 e2e 测试目录 src index html 网站主页面 main ts 应用
  • React:主题切换

    效果图 useTheme import useState useEffect useRef from react const useTheme active theme gt const LOCAL KEY theme 如果浏览器存有 LO
  • VBA的常见语法整理

    1 for循环 2 字符串连接符 Dim i For i 1 To 10 Cells i 2 第 i 行 Next i 3 设定必须显式声明变量 Option Explicit 4 while循环 Dim j j 1 While Cells
  • GD32单片机USB HID模式连续发送多包数据,出现丢包现象

    项目背景 产品使用GD32F103单片机实现USB HID模式 周期发送数据包 在特定情况下 需要连续发送三包数据 测试发现 只接收到了最后一包数据 前面的数据丢失了 故障排查 原发送函数如下 再调用custom hid report se
  • volatile、ReentrantLock和synchronized保证线程可见性原理

    主存 工作内存 在了解什么是线程可见性前 我们先来简单了解下 Java内存模型 的主存 工作内存抽象概念 主存 存储的是一些共享资源的存储位置 例如静态变量等 工作内存 每个线程对应的栈内存对应的私有局部资源的存储位置 我们来分析一个小案例
  • 浅识:元组、字典和集合

    目录 一 轻量性列表 元组 一 了解 元组 二 简单的元组操作 三 可哈希对象 二 映射类型 字典 一 了解 字典 二 字典的操作 三 无序可变序列 集合 一 了解集合 二 集合操作与运算 一 轻量性列表 元组 一 了解 元组 列表的功能十
  • Mac下jdk的安装路径

    http hi baidu com liouyan9 blog item 78fdc009b97bdac63ac76377 html Mac下jdk的安装路径 2009 08 11 15 39 苹果系统已经包含完整的J2SE 其中就有JDK
  • Spring Cloud微服务技术栈学习(导读)

    目录标题 前言 微服务架构解决方案 什么是spring cloud 技术组件 概念区分 1 spring cloud alibaba与spring cloud netflix 2 微服务技术之间的关系 3 springcloud是通过htt
  • 单调栈理解

    文章目录 单调栈 什么是单调栈 模拟实现一个单调栈 一些例题 视野总和 下一个最大元素 单调栈 什么是单调栈 从名字上就听的出来 单调栈中存放的数据应该是有序的 所以单调栈也分为单调递增栈和单调递减栈 单调递增栈 单调递增栈就是从栈底到栈顶
  • 常见猫咪种类

    文章目录 中华田园猫 猫图秀 概况 产地血统 毛色特征 形态特征 性格特征 近种区别 饲养特点 适养人群 英短 猫图秀 概况 产地血统 毛色特征 形态特征 性格特征 近种区别 饲养特点 适养人群 美短 猫图秀 概况 产地血统 毛色特征 形态
  • 双目标定(一)单目标定与矫正的基本介绍

    1 单目相机标定 首先 任何标定都是用基于小孔模型的数学模型去近似相机模型 我们需要用fx f dx fy f dy 图像坐标系中的光心原点坐标 和可能的缩放因子ks 这5个相机内参数 切向畸变参数和径向畸变参数 共5 N个参数来 近似 整
  • iOS 图片处理学习: 实现点九切图

    先来一个例子 一张图片 保留中间 拉伸两边 看效果 原始图片 easy 处理后 调用代码 view backgroundColor UIColor white let imgViewWidth CGFloat 300 let imgView
  • Gvim插件

    plugin 编程相关 公共 taglist 相信无人不知其大名 用来提供单个源代码文件的函数列表之类的功能 最近在使用一个针对面向对象语言的类似插件 tagbar vim 也很不错 NERD commenter 提供快速注释 反注释代码块
  • DeepChem预测小分子溶解度

    在药开发中 根据化学式预测小分子的溶解度 是开发药物小分子时要考虑的非常重要的性质 如果一种药物的溶解度不够 你可能无法将足够的药物输送到患者的血液中产生治疗效果 我们需要的第一件事是一个真实分子的测量溶解度的数据集 DeepChem的核心
  • [ctfshow]入门2

    目录 web14 默认配置 web15 社会工程学 web16 探针泄露 web17 sql备份 wed18 js小游戏 web19 数据库泄露 web20 mbd文件 杂项5 杂项6 杂项6 杂项7 杂项8 杂项10 杂项11 隐写1 隐
  • feign 序列化_自定义 feign 反序列化时间字符格式

    feign client 默认配置类 默认的配置类为FeignClientsConfiguration 配置了解码和编码 当请求Feign Client的方法执行时会被 SynchronousMethodHandler 类中的 invoke
  • 网络带宽单位转换 — MB/s、Mb/s、Mbps、Mbit/s、Kbps

    1 bit s 和 bps 的区别 bit s 和 bps 都是一样的意思 bit per second 2 KB s 和 Kb s 的区别 大写 B 和小写 b KB s 和 Kb s 的意思不一样 KB s 中的 大 B 表示 Byte
  • 通配符的应用

    我们使用通配符描述切入点 主要的目的就是简化之前的配置 具体都有哪些通配符可以使用 单个独立的任意符号 可以独立出现 也可以作为前缀或者后缀的匹配符出现 execution public com itheima UserService fi
  • Wireshark 解密https 数据

    默认情况下 wireshark 抓到的https 数据包都是加密后的 无法展示明文内容 方式一 SSLKEYLOGFILE 变量方式 推荐 适用各种情况 配置环境变量 浏览器在访问https 站点的时候会检测这个SSLKEYLOGFILE
  • java反射field.setAccessible()方法作用

    Accessable属性是继承自AccessibleObject 类 功能是启用或禁用安全检查 JDK API中的解释 引用AccessibleObject 类是 Field Method 和 Constructor 对象的基类 它提供了将