java反射机制(访问私有字段和私有方法)

使用反射调用私有方法 使用反射调用私有方法 ????获取私有方法的步骤: 1.获取目标类 2.获取目标方法 Method method=clazz.getDeclaredMethod(name);//可以调用类中的所有方法(不包括父类中继承的方法) Method method=clazz.getMethod(name);//可以调用类中有访问权限的方法(包括父类中继承的方法) 3.method.toGenericString()或method.toString()方法来输出方法的字符串形式 toGenericString( 阅读详情

来自:http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html

 

尽管我们通常认为通过JAVA的反射机制来访问其它类的私有字段和私有方法是可行的,其实并没有那么困难。

注释:只有在单独的JAVA程序中运行该代码才有效,就像你做一些单元测试或者常规的程序。如果你尝试在JAVA APPLET内使用该方法,你需要稍稍修改SecurityManager。但是,因为你不是经常需要与它打交道,这里也就不再赘述了。

 

这里是本次内容的列表:

1. 访问私有字段。

2. 访问私有方法。

 

访问私有字段:

为了访问私有字段,你需要调用Class.getDeclaredField(String name)或者Class.getDeclaredFields()方法。方法Class.getField(Stringname)和Class.getFields()仅仅返回共有的字段,所以它们都无法起到作用。这里有一个例子,该例子中有一个包含私有字段的类,在该类下面有通过反射访问私有字段的代码。

 

 

[java] view plain copy

 

1.  public class PrivateObject {  

2.   

3.    private String privateString = null;   //声明为私有字段  

4.   

5.    public PrivateObject(String privateString) {  

6.     this.privateString = privateString;  

7.    }  

8. }  

 

 

 

[java] view plain copy

 

1.  PrivateObject privateObject = new PrivateObject("The Private Value");//实例化对象  

2.   

3.  Field privateStringField = PrivateObject.class.  

4.             getDeclaredField("privateString");  

5.    

6. privateStringField.setAccessible(true);//允许访问私有字段  

7.    

8. String fieldValue = (String) privateStringField.get(privateObject);//获得私有字段值  

9.  System.out.println("fieldValue = " + fieldValue);  

 

 

这个代码会打印出文本"fieldValue = The Private Value",而该值正好是对象PrivateObject的私有字段privateString的值。

注意到我们使用了方法PrivateObject.class.getDeclaredfield("privateString")。正是这个调用这个方法返回了私有字段。这个方法仅仅根据指定的类返回字段,不会返回父类申明的字段。

另外仔细观察加粗的语句。通过调用 Field.setAccessible(true),你关掉了对于这个指定字段实例的访问检查,仅仅对反射有效。现在你能访问它了,不管它是私有的,保护的或是默认的(default),即时调用者并不在该范围中。你仍然不能通过常规方法访问该字段,因为编译器不允许。

 

访问私有方法

 

为了访问一个私有方法,你需要调用Class.getDeclaredMethod(String name,Class[]parameterTypes)或者Class.getDeclaredMethods()方法。方法Class.getMethod(String name,Class[]parameterTypes)和Class.getMethods()仅仅返回公有方法,所以它们不会起到作用。下面是一个简单的例子,该例子中有一个拥有私有方法的类,类下面是通过反射机制访问私有方法的代码。

 

 

[java] view plain copy

 

1.  public class PrivateObject {  

2.   

3.    private String privateString = null;  

4.   

5.    public PrivateObject(String privateString) {  

6.     this.privateString = privateString;  

7.    }  

8.   

9.    private String getPrivateString(){//私有方法  

10.    return this.privateString;  

11.   }  

12.}  

 

 

 

[java] view plain copy

 

1.  PrivateObject privateObject = new PrivateObject("The Private Value");  

2.   

3.  Method privateStringMethod = PrivateObject.class.  

4.         getDeclaredMethod("getPrivateString", null);  

5.    

6. privateStringMethod.setAccessible(true);  

7.    

8. String returnValue = (String)  

9.          privateStringMethod.invoke(privateObject, null);  

10.      

11. System.out.println("returnValue = " + returnValue);  

 

 

 

这个代码例子会打印出文本"returnValue = The private Value",该值正好是私有方法的返回值

 

java 反射 调用私有方法(有参数私有方法)获取私有属性值 立即下载

相关推荐

elasticsearch常用版本

elasticsearch 下载后解压,选择自己需要的版本 进在解压,进入bin 启动 es

深入理解Java反射(通俗易懂)

反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象...

Mr.zhao 5275

jsp简单的员工信息管理系统 附源码 程序实践

jsp简单的员工信息管理系统.zip 可用于程序实践

java中反射机制代码_java反射机制学习笔记及例子代码

Java反射的API反射中常常用的几个类如下所示:java.lang包中:--Class类:代表一个类Java中,无论生成某个类的多少个对象,这些对象都会对应同一个Class对象Java.lang.reflect包中:--Field类:代表类的成员变量(类的属性)--Method类:代表类的方法,一个方法对应一个Method对象--Constructor类:代表类的构造方法...

weixin_29410959的博客 171

新闻编辑器

可用于新闻编辑及文档,适用于新闻编辑者,新闻排版,新闻模拟器,网站运营模拟等

过程设备设计思考题及答案

过程装备与控制工程专业-过程设备设计-思考题及答案

使用反射调用类的私有内部类的私有方法

利用反射调用类的私有方法,调用类的私有内部类的私有方法

17的博客 2587

电源完整性之Cadence Sigrity Power DC_电热协同仿真

之前和大家分享过电源完整性之仿真设计原理链接: link.今天接着上一篇文章总结一下电源直流压降的的仿真操作流程及一些simulation中的设置参数,用到的是Cadence Sigrity 中的Power DC组件,来操作一下电热协同仿真,下面开始享受仿真的快乐吧: 第0步:仿真简介 电热协同仿真把电和热相互的影响考虑到了一起。因为电导率并不是固定不变的,而是和温度有关,随着温度的升高导电率会下降。同样电流流径电阻的时候会产生热量,此热量为焦耳热。因此为了获得准确的仿真信息,应考虑电与热的互相影响,进行电

刘小同学的博客 1万+

Java反射调用私有域和方法(AccessibleObject可访问性控制)

1.AccessibleObject Method、Field和Constructor类都继承了AccessibleObject类,它提供了标记反射对象的能力,以抑制在使用时使用默认Java语言访问控制检查,从而能够任意调用被私有化保护的方法、域和构造函数; /** *AccessibleObject是Method、Field、Constructor类的基类,它提供了将反射的对象标记为在...

OceanSky的专栏 5499

别再乱选WiFi信道了!手把手教你用WiFi Analyzer优化2.4G/5G家庭网络(附避坑指南)

本文详细介绍了如何使用WiFi Analyzer工具优化家庭WiFi网络,解决2.4GHz和5GHz信道的冲突问题。通过分析信道拥堵原因、提供安装使用指南及优化策略,帮助用户显著提升网络速度与稳定性,特别适合密集住宅区和多设备家庭。

weixin_42665725的博客 5882

(四) OpenClaw-Skill技能全面了解和自定义技能

OpenClaw Skills是提升AI代理功能性的关键模块。本文系统介绍了Skills的核心概念、获取渠道和创建方法。Skills作为标准化指令集合,能让OpenClaw从单纯理解升级为实际执行任务,相比传统System Prompt具有模块化、可复用等优势。用户可通过Clawhub官方商店、GitHub社区等渠道获取5700+现成技能,或按需开发自定义Skill。文章详细演示了创建"Hello World"示例技能的完整流程,包括编写Python脚本、配置SKILL.md文件、部署。

直到世界的尽头 8295

java 反射获取私有字段_java反射机制(访问私有字段和私有方法)

尽管我们通常认为通过JAVA的反射机制来访问其它类的私有字段和私有方法是可行的,其实并没有那么困难。注释:只有在单独的JAVA程序中运行该代码才有效,就像你做一些单元测试或者常规的程序。如果你尝试在JAVA APPLET内使用该方法,你需要稍稍修改SecurityManager。但是,因为你不是经常需要与它打交道,这里也就不再赘述了。这里是本次内容的列表:1. 访问私有字段。2. 访问私有方法。访...

weixin_31435039的博客 1425

25杰瑞机械工程师面试经验机械面试问题总结技巧面试全攻略

作为一个对机械工程充满热情的应届生,我有幸参加了杰瑞集团的机械工程师面试。面试过程既充满挑战,也不乏乐趣。以下是我面试的详细经历,包括面试流程、面试题目及参考答案。 #### 面试流程 1. **HR初面**:主要是对个人背景、教育经历和工作经验的初步了解。 2. **技术面**:由技术部门的主管进行,主要考察专业知识和项目经验。 3. **部门经理面**:更深入地了解我的技术能力和团队合作精神。 4. **总监终面**:最后一轮面试,总监会对候选人的整体素质进行评估。

m0_72216164的博客 2794

Java 反射之私有字段和方法详细介绍

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33948416的博客 109

【系统架构设计师】2025年下半年真题论文回忆版及写作要点

本文摘要围绕云原生数据库、性能测试、无服务器架构和秒杀场景等关键技术进行论述。云原生数据库通过容器化、微服务和自动化运维实现弹性扩展;性能测试需要规划测试场景并关注响应时间等关键指标;无服务器架构以事件驱动为核心,简化开发流程;秒杀场景需组合运用扩容、缓存、限流等技术应对高并发。这些技术方案为构建现代高可用系统提供了重要参考。

数据知道的博客 6157

【纯干货分享】常用高速接口眼图模板合集

文章汇集了常见的高速接口的信号眼图测试模板技术要求,比如,LPDDR5/4、PCIe 5.0/4.0、USB、MIPI等等,方便工程师快速进行查询和使用。

一只豌豆象的博客 3116

java 反射私有字段_Java 反射之私有字段和方法详细介绍

尽管我们通常认为通过JAVA的反射机制来访问其它类的私有字段和私有方法是可行的,其实并没有那么困难。注释:只有在单独的JAVA程序中运行该代码才有效,就像你做一些单元测试或者常规的程序。如果你尝试在JAVA APPLET内使用该方法,你需要稍稍修改SecurityManager。但是,因为你不是经常需要与它打交道,这里也就不再赘述了。这里是本次内容的列表:1.访问私有字段。2.访问私有方法。访问私...

weixin_39732609的博客 261

使用abagen工具箱获取基于脑区的基因表达矩阵

脑区模板定义了您感兴趣的脑区的空间位置。abagen提供了一些预定义的脑区模板,您可以选择使用,也可以使用自定义的脑区模板。它提供了一种简便的方式来获取基于脑区的基因表达矩阵。abagen需要使用Allen脑图谱数据来获取基因表达矩阵。您可以使用abagen内置的下载功能来获取这些数据。这就是使用abagen工具箱获取基于脑区的基因表达矩阵的详细步骤。通过按照上述步骤操作,您可以轻松获取并使用Allen脑图谱数据中的基因表达信息。一旦您加载了脑区模板,您可以使用abagen来获取基于脑区的基因表达矩阵。

web_bug407的博客 1326

java getfields_Java反射机制中getFields和getDeclareFields的区别

在java反射机制中,代表java类型的Class>对象有两个获得类字段的方法getFields和getDeclareFields,这两个方法的区别如下getFields方法返回一个Field类型数组,其中包含当前类的public字段,如果此类继承于某个父类,同事包括父类的public字段。其它的proteced和private字段,无论是属于当前类还是父类都不被此方法获取。getDecla...

weixin_39834780的博客 256

【1】Python交叉编译到OpenHarmony标准系统运行(arm32位)

本文介绍如何Python语言如何在OpenHarmony标准系统运行,包括5.0r和4.1r以及4.0r,和未来版本的OpenHarmony版本上。 Python语言在OpenHarmony上使用,需要将Python解释器CPython移植到OpenHarmony标准系统。通过交叉编译的方式。

weixin_58069108的博客 928

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java高级反射之获取字段(三)

package com.jk.fs; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /**  *   * @author sx123  *  */ public class ReflectzDemo {     public sta...

youjiangtengwan1的博客 252

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java中利用反射对类的hidden成员方法和属性的访问

java中通过访问控制符来控制对类成员的访问,private 成员表示只在类的内部才可以被访问,但是利用java的反射机制却可以再类的外部来访问类的私有成员 下面是个简单的例子来说明这一点 package com.eric.reflect; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * *

不积跬步,无以至千里;不积小流,无以成江海! 1772

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 总是这么奇怪
下一篇: @Autowired和@Resource的区别是什么?
withtoNature
博客等级 码龄10年 20粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值