java 私有成员方法_Java Reflection 教程(7):类私有成员变量和方法
一般来说,不可以访问类的私有成员变量和调用类的私有方法。但通过Java Reflection API可以绕过这个限制,前面使用的getMethods, getFields,getConstructors 等方法都是返回的类的public 方法,类成员和构造函数。
本篇介绍如何使用Java Reflection API来访问类的私有成员。
1. 访问私有成员
Class的getDeclaredField(String name) 和getDeclaredFields 可以返回类的所有成员变量包括私有成员变量。
public class PrivateObject {
private String privateString = null;
public PrivateObject(String privateString) {
this.privateString = privateString;
}
}
....
PrivateObject privateObject = new PrivateObject("The Private Value");
Field privateStringField = PrivateObject.class.
getDeclaredField("privateString");
privateStringField.setAccessible(true);
String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);
上面代码可以方法类PrivateObject的私有成员privateString。要注意的是privateStringField.setAccessible(true);必须打开类成员的访问控制后才可以访问该私有成员。也只有使用Java Reflection API 才可以访问类的私有成员。
2. 访问类的私有方法
同样Class的getDeclaredMethod(String name) 和getDeclaredMethods 可以用来访问类额私有方法。
public class PrivateObject {
private String privateString = null;
public PrivateObject(String privateString) {
this.privateString = privateString;
}
private String getPrivateString(){
return this.privateString;
}
}
...
PrivateObject privateObject = new PrivateObject("The Private Value");
Method privateStringMethod = PrivateObject.class.
getDeclaredMethod("getPrivateString", null);
privateStringMethod.setAccessible(true);
String returnValue = (String)
privateStringMethod.invoke(privateObject, null);
System.out.println("returnValue = " + returnValue);
同样需要调用privateStringMethod.setAccessible(true);打开对该私有方法的访问控制后才可访问该私有成员方法。
java 私有成员方法_Java Reflection 教程(7):类私有成员变量和方法相关推荐
- java 访问类变量_如何访问类的成员变量和方法
在Java应用程序中,经常需要访问类的成员变量和方法,以实现程序的功能,请问应该如何访问类的成员变量和方法?在Java中通过类的实例(即对象)点(.)运算符来访问类的成员变量和方法,今天百分网小编为大 ...
- java访问成员变量和方法_如何访问类的成员变量和方法
如何访问类的成员变量和方法 在Java应用程序中,经常需要访问类的成员变量和方法,以实现程序的功能,请问应该如何访问类的成员变量和方法?在Java中通过类的实例(即对象)点(.)运算符来访问类的成员变 ...
- java面试题2 牛客:定义类中成员变量时不可能用到的修饰是
懵逼树上懵逼果,懵逼树下你和我 第二题 定义类中成员变量时不可能用到的修饰是() A final B void C protected D static 一看到这道题,有点慌了,直接选c,很显然,我又 ...
- Java语言基础Day14(内部类、类作为成员变量类型、接口作为成员变量类型、接口作为方法的参数或返回值、红包案例、JDK9的JShell、编译器的两点优化)
今日内容 一.内部类 1.内部类的概念与分类 2.成员内部类的定义 3.成员内部类的使用 4.内部类的同名变量访问 5.局部内部类定义 6.局部内部类的final问题 7.匿名内部类 匿名内部类定义格 ...
- 我终于明白了!!!类、成员变量、方法、以及如何定义他们,还有static到底干啥用?
今天是大年初五呀,迎财神的日子!最近一直都忙着背英语单词,刷韩老师的课程,看<Java疯狂讲义>.看书 最近看了几本关于自我成长不错的书籍,也慢慢摆脱了追求阅读速度的急切心理,有句话感觉说 ...
- java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等
java泛型方法 通配符 泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 将泛型与集合类一起使 ...
- Java码农进阶之路~构造方法静态与成员变量及方法
一 构造方法 当你在这个类中没有提供无参的构造方法的时候,系统会在你创建对象的时候,也会调用无参的构造,而这个无参方法,系统会帮你提供一个. 如果你只是提供了有参的构造方法,那么系统将不再给你提供 无 ...
- 一个类怎样引用另外一个类的成员变量或方法
通常常用的有:A类有个变量C,B类想调用C方法一:变量C是非静态的(static),那么在B类中创建一个A类的对象,用对象.变量名就可以了方法二:变量C是静态的(static),直接用类.变量名 详细 ...
- java中的类、成员变量、方法的修饰符。
http://blog.sina.com.cn/s/blog_7ffb8dd501011alw.html http://www.cnblogs.com/lixiaolun/p/4311727.html ...
最新文章
- InstallShield学习笔记(2)-建立快捷方式
- 关于Quartz.NET作业调度框架的一点小小的封装,实现伪AOP写LOG功能
- Java基础super关键字、final关键字、static关键字、匿名对象整理
- 007_Buzz事件
- sequence跳号问题及解决办法
- linux字符模式分辨率grub2,Deepin 15.8系统Grub菜单分辨率低的原因及解决方案
- 一秒等于多少毫秒_全国首批!海宁5G正式商用!用手机的人必看!快多少?价贵吗?怎么换?...
- Jmeter接口测试实例图文示例
- Linux卡巴斯基杀毒(kesl)基础操作
- MCMC算法—MH算法的Python实现(一)
- MAC搭建ios自动化测试环境
- 计算机实训实验报告,审计实务实验报告总结审计实训实验报告计算机审计实验总结...
- Python之建模数值逼近篇–最小二乘拟合
- cf Round#779 D 388535
- java基础之 IO流
- cisco pkt 路由器配置基础及接口配置 路由协议与交换技术
- 湘大c语言期末考试试题及答案,湘大机房c语言试题.doc
- Camtasia喀秋莎2022经典版能编辑4K视频
- verilog学习记(学习设计cpu)
- 四川安湖科技:抖音开店有什么流程