返回顶部
首页 > 资讯 > 精选 >Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法
  • 193
分享到

Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法

2023-06-22 01:06:55 193人浏览 八月长安
摘要

这篇文章主要介绍了Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java反射获取私有构造、私有对象、私有字段、私

这篇文章主要介绍了Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

Java反射获取私有构造、私有对象、私有字段、私有方法

1. 创建测试的私有对象

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. 获取私有对象中的属性和方法

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怎么通过反射获取私有构造、私有对象、私有字段、私有方法”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法

本文链接: https://lsjlt.com/news/301857.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法
    这篇文章主要介绍了Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java反射获取私有构造、私有对象、私有字段、私...
    99+
    2023-06-22
  • Java如何通过反射获取私有构造、私有对象、私有字段、私有方法
    Java反射获取私有构造、私有对象、私有字段、私有方法 1. 创建测试的私有对象 public class Person { private int age = 5; ...
    99+
    2024-04-02
  • Java获取类信息的三种方法+通过反射获取私有属性
    通过下面三种方法,我们可以获取到类的信息,包括类的名称、修饰符、父类、接口、字段、方法等信息。这些信息可以用于进行反射操作,例如动态创建对象、调用方法、访问字段等。 通过反射可以 使用Class.forName()方法 Class.forN...
    99+
    2023-10-02
    java python 开发语言
  • 如何使用反射获取私有类型?
    编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天编程网就整理分享《如何使用反射获取私有类型?》,文...
    99+
    2024-04-04
  • golang 如何使用反射访问私有字段和方法
    go语言中可以使用反射来访问私有字段和方法:访问私有字段:通过 reflect.valueof() 获取值的反射值,再使用 fieldbyname() 获取字段的反射值,并调用 stri...
    99+
    2024-05-03
    反射 私有访问 golang go语言
  • python私有属性和方法怎么获取
    今天小编给大家分享一下python私有属性和方法怎么获取的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2024-04-02
  • 私有构造器怎么在Java中使用
    私有构造器怎么在Java中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。构造器作为Java类的一个特殊的成员同样可以设置关键字来控制其访问权限。在大多数情况...
    99+
    2023-05-31
    java ava
  • goMethodByName()不能获取私有方法的解决
    在使用reflect包获取函数,并调用时,总出现这个报错: panic: reflect: call of reflect.Value.Call on zero Value 然后测试...
    99+
    2023-02-02
    go MethodByName()不能获取 go MethodByName()
  • php怎么访问私有方法
    这篇文章主要介绍了php怎么访问私有方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php怎么访问私有方法文章都会有所收获,下面我们一起来看看吧。在面向对象编程中,私有方法是一个对象的一部分,并且不能直接从对...
    99+
    2023-07-05
  • JavaScript 对象中怎么嵌入私有成员
    JavaScript 对象中怎么嵌入私有成员,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 为何要用私有成员(Private Memb...
    99+
    2024-04-02
  • javascript中公有方法和私有方法怎么用
    这篇文章主要介绍“javascript中公有方法和私有方法怎么用”,在日常操作中,相信很多人在javascript中公有方法和私有方法怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • 怎么在javascript中定义私有方法
    怎么在javascript中定义私有方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多...
    99+
    2023-06-14
  • 怎么通过服务器搭建私有云存储
    要通过服务器搭建私有云存储,您可以按照以下步骤进行操作:1. 选择合适的硬件:选择一台高性能的服务器,确保它具备足够的存储容量和处理...
    99+
    2023-08-09
    服务器
  • Java9中接口的私有方法怎么使用
    本篇内容介绍了“Java9中接口的私有方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java 8 之前版本Java 8 之前 ,...
    99+
    2023-07-06
  • 通过搭建私有云盘替换FTP过程是怎么样的
    这篇文章将为大家详细讲解有关通过搭建私有云盘替换FTP过程是怎么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。说到局域网文件夹共享工具,很多人就会自动联想到Windows文件共享,FTP...
    99+
    2023-06-04
  • 基于Harbor构建docker私有仓库的方法是什么
    基于Harbor构建docker私有仓库的方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.harbor简介基于镜像的复制策略;支持LDAP/AD域,...
    99+
    2023-06-21
  • PHP私有静态方法怎么定义和使用
    这篇文章主要介绍“PHP私有静态方法怎么定义和使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP私有静态方法怎么定义和使用”文章能帮助大家解决问题。什么是私有静态方法?在PHP面向对象编程中,...
    99+
    2023-07-05
  • Python中关于面向对象私有属性方法的详细讲解
    目录1.私有属性和私有方法私有属性:私有方法:类部调用私有属性和私有方法子类不能继承父类私有属性和方法实例属性(对象属性)通过实例(对象)去修改类属性2.修改私有属性的值3.类属性和...
    99+
    2024-04-02
  • c#怎么在一个类里定义另一个类的私有字段
    如何在 c# 中在一个类中定义另一个类的私有字段?在父类中定义子类作为私有字段。使用子类的公共属性或方法来访问子类的成员。 如何在一个类中定义另一个类的私有字段 在 C# 中,可以在一...
    99+
    2024-05-14
    c#
  • 私有云服务器无法连接网络怎么解决方法
    当无法连接到私有云服务器时,用户可以采取以下措施来解决问题: 检查网络配置:检查云服务器的IP地址、网关、子网掩码等配置是否正确,并确保网络配置能够与云服务器的配置相匹配。 检查网络连接:检查云服务器的网络连接是否正常,包括IP地址、网...
    99+
    2023-10-28
    解决方法 服务器 网络
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作