Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,这篇文章主要介绍了Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java
千家信息网最后更新 2025年11月12日Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法
这篇文章主要介绍了Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
Java反射获取私有构造、私有对象、私有字段、私有方法
1. 创建测试的私有对象
/** * @author lirong * @desc 测试对象 * @date 2019/06/20 20:07 */public class Person { private int age = 5; private String name; private Person(){} private String test(String name){ System.out.println("name: "+name); return "test"; }}2. 获取私有对象中的属性和方法
/** * @author lirong * @desc 反射获取私有属性和方法 * @date 2019/06/20 20:10 */public class Test { public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException { // 1. 获取class对象 Class clazz = Person.class; // 2. 获取私有无参构造 Constructor c = clazz.getDeclaredConstructor(); // 3. 设置访问为可见 c.setAccessible(true); // 4. 通过构造器创建实例对象 Person person = (Person) c.newInstance(); // 根据字段名称获取class中的字段 Field age = clazz.getDeclaredField("age"); age.setAccessible(true); System.out.println(age.getName() + " = " + age.get(person)); // 修改私有变量的默认值 age.set(person, 18); System.out.println(age.getName() + " = " + age.get(person)); // 5. 获取所有字段 Field[] fields = clazz.getDeclaredFields(); for (Field f : fields) { // 设置字段的可见性 f.setAccessible(true); String name = f.getName(); Object o = f.get(person); System.out.println(name + " - " + o); } // 6. 获取所有的方法 Method[] methods = clazz.getDeclaredMethods(); for (Method m : methods) { m.setAccessible(true); String name = m.getName(); Object invoke = m.invoke(person, "张三"); System.out.println(name + " = "+invoke); } }}通过反射获取私有内部类对象
首先是我们的目标对象:
class Out { //目标获取Inner对象 private class Inner { //内部类的私有成员属性 private String inner = "ccc"; }}直接列出代码
public class Main { @SuppressWarnings({ "rawtypes", "unchecked" }) public static void main(String[] args) throws Exception { //获取外部类 Class clzz = Out.class; //获取外部类默认无参构造方法 Constructor con = clzz.getDeclaredConstructor(); //实例一个外部类对象 Out outObj = (Out) con.newInstance(); //获取外部类内的所有内部类 Class innerClazz[] = clzz.getDeclaredClasses(); //遍历 for (Class c : innerClazz) { //获取修饰符的整数编码 int mod = c.getModifiers(); //返回整数编码对应的修饰符的字符串对象 String modifier = Modifier.toString(mod); //找到被private修饰的内部类 if (modifier.contains("private")) { //根据内部类的特性,需要由外部类来反射获取内部类的构造方法(这里获取的是内部类的默认构造方法) Constructor cc = c.getDeclaredConstructor(clzz); //由于内部类是私有的,需要强制获取构造方法的访问权限 cc.setAccessible(true); //由外部类对象来反射获取内部类的对象 Object obj=cc.newInstance(outObj); //获取内部类的私有成员属性inner Field f=c.getDeclaredField("inner"); //获取访问权限 f.setAccessible(true); //获取内部类对象obj中的私有成员属性inner的值 System.out.println(f.get(obj)); } } }}输出结果:
ccc
感谢你能够认真阅读完这篇文章,希望小编分享的"Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
私有
对象
方法
字段
反射
属性
篇文章
成员
实例
整数
权限
目标
编码
测试
代码
价值
兴趣
变量
同时
名称
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
c s数据库假设
网络技术研究一般用什么方法
java导包数据库保
网络安全宣传周学校工作方案
网络安全讲座主持词大学
数据库服务器网卡
北京东盛天网网络技术有限公司
义乌软件开发开发商
腾讯云服务器最大内存
如何开我的世界服务器
铁路集团网络安全红线管理
数据库第四版第八章答案
全新服务器扩容
mysql备份所有数据库
我的世界服务器送管理员
cde官网怎样查询数据库
网络安全与网信工作会议
服务器tps一般多少正常
数据库物流技术
问道每个区都是同一个服务器吗
博雅数据库河北2020文科
计算机网络技术 王巍
java版qq客户端和服务器端
控制器软件开发好跳槽吗
数据库分表的具体操作过程
怎么映射一个服务器为一个盘
建信人寿安徽软件开发
网络安全工程师的尴尬知乎
初一的网络安全靠大家手抄报
柯美303服务器管理密码