反射之成员方法

news2024/9/29 13:14:49

 
        Class类中用于获取成员方法的方法
        Method[] getMethods():      返回所有公共成员方法对象的数组,包括继承
        Method[] getDeclaredMethods():  返回所有成员方法对象的数组,不包括继承
        Method getMethod(String name,Class )
        Method getDeclaredMethod()

        Method类中用于创建对象的方法
        Object invoke(Object obj,Object ...args):运行方法
        参数一:用obj对象调用该方法
        参数二:调用方法传递的参数(如果没有就不写)
        返回值:方法的返回值(如果没有就不写)

public class Demo {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {

        //1、获取class字节码文件
        Class clazz = Class.forName("反射.Method类.Student");

        //2、获取里面所有的方法对象(包含父类中所有的公共方法)
        Method[] methods = clazz.getMethods();
        for (Method method:methods){
            //System.out.println(method);
        }

        //3、获取里面所有的方法(不可以获取父类的,但是可以获取本类中私有的方法)
        Method[] declaredMethods = clazz.getDeclaredMethods();
        for (Method method:declaredMethods){
            System.out.println(method);
        }

        //4、获取单个的方法(参数一:方法的名字 参数二:参数类型,这是为了防止重载)
        Method eat = clazz.getDeclaredMethod("eat", String.class);
        System.out.println(eat);

        //5、获取方法的修饰符
        int modifiers = eat.getModifiers();
        System.out.println(modifiers);

        //6、获取方法的名字
        String name = eat.getName();
        System.out.println(name);

        //7、获取方法的形参
        Parameter[] parameters = eat.getParameters();
        for (Parameter parameter:parameters){
            System.out.println(parameter);
        }

        //8、获取方法抛出的异常
        Class[] exceptionTypes = eat.getExceptionTypes();
        for (Class exceptionTyep:exceptionTypes){
            System.out.println(exceptionTyep);
        }

        //9、方法运行
        //Object invoke(Object obj,Object ...args):运行方法
        //参数一:用obj对象调用该方法
        //参数二:调用方法传递的参数(如果没有就不写)
        // 返回值:方法的返回值(如果没有就不写)

        //调用者
        Student stu=new Student();
        eat.setAccessible(true);//临时取消权限检测
        //参数一表示方法的调用者,参数二表示实际参数
        String result =(String) eat.invoke(stu, "汉堡包");
        System.out.println(result);

    }
}

总结

1、获取字节码文件对象

2、获取字节码文件对象中的方法对象

3、通过方法对象获取这个对象的属性

4、创建对象,利用实例获取对象中的各部分元素

注意:如获取private修饰的构造方法,成员变量,成员方法时,需要使用setAccessible()方法暂时跳过权限检测

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/429516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

笔记本硬盘坏了还能恢复数据吗 笔记本硬盘坏了怎么修复

笔记本电脑是经常使用的的学习、工作设备,它的硬盘中储存着大量的数据。一旦笔记本硬盘出现故障,这些数据会无法正常使用,对我们的学习生活产生重大影响。那么,笔记本硬盘坏了还能恢复数据吗,笔记本硬盘坏了怎么修复&a…

如何制作每日工作清单,让你高效完成开发工作

作为开发者,每天都有大量的任务需要完成。有时候,我们可能会感到无所适从,甚至失去动力。那么,如何有效地管理自己的任务和时间呢?在这篇文章中,我们将分享一位国外程序员大佬的亲身经验,介绍他…

【已解决】Field ‘id‘ doesn‘t have a default value 错误的解决办法

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

OpenLdap学习笔记3

1、进入容器: docker exec -it my-openldap-container /bin/bash2、在home目录下创建learn目录: CD /home mkdir learn 3、创建barbara.ldif文件: dn: cnbarbara,dcexample,dcorg objectClass: inetOrgPerson cn: barbara sn: Jensen titl…

优思学院|质量大师的那些名言(一)【质量是免费的】

名言是一种短小精悍、言简意赅的语言表达方式,它们通常包含着深刻的哲理和智慧,可以为我们提供指导和启示。 优思学院会在这个《质量大师的那些名言》系列中让大家透过那些名言,用最简单、直接,和深刻的方法来学习质量和六西格玛…

H2 Database Console未授权访问漏洞复现+利用

1、产品简介 H2是Thomas Mueller提供的一个开源的、纯java实现的关系数据库。H2的主要特点是:非常快,开源,JDBC API;嵌入式和服务器模式;内存数据库;基于浏览器的控制台应用程序。 2、漏洞概述 H2 datab…

virsh 获取虚机IP,网桥ip,brctl,arp使用

第一种方法: allenjettech-WS-C621E-SAGE-Series:~$ sudo virsh domifaddr win10-01Name MAC address Protocol Address -------------------------------------------------------------------------------vnet0 52:54:00:b3:42:28 ipv4 1…

电脑不限时长的录屏软件分享

案例:有没有录屏软件不限时长录制视频? “今天的视频会议特别重要,我想用录屏的方式记录下来。在网上下载了一个录屏软件,录到3分钟的时候,需要解锁高级功能才能继续录制。想问问大家有没有电脑免费不限时长的录屏软件…

四百左右哪款蓝牙耳机比较好?400元价位蓝牙耳机推荐

除了日常通勤以及休息前听歌以外,随着加班变得频繁,工作时也戴起了耳机,由于市面上的耳机种类繁多,因此许多人不知道从而选择,小编发现更多的人是追求性价比,所以整理了一期四百左右性能表现优异的款式给大…

Leetcode 剑指 Offer II 023. 两个链表的第一个重合节点

题目难度: 简单 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定两个单链表的头节点 headA 和 headB ,请找出并返…

vs2022 xp支持情况测试

vs2022默认安装是不支持xp的,生成的可执行文件在xp下报错如图: 1、 若要vs2022支持xp,需要安装xp支持模块,如下图,单个组价,勾选xp支持,右边自动打勾,直接安装即可; 2、工…

2023年第十三届MathorCup高校数学建模挑战赛|C题|电商物流网络包裹应急调运与结构优化问题

【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 1 题目 电商物流网络由物流场地(接货仓、分拣中心、营业部等)和物流场地之间的运输线路组成,如图 1 所示。受节假日和“双十一”、“618”等…

QTableView中添加代理控件

目录 1、设置样式文件 2、set base attribute 3、设置model 4、设置表头 5、设置数据 6、添加代理控件 6.1 添加 QSpinBox 代理 6.2 添加 QComboBox 代理 6.3 添加 QPushButton 代理 6.4 添加 CheckBox 代理 6.5 添加 Pixmap 代理 6.6 添加 LineEdit 代理 6…

部署环境从docker swarm迁移到k8s后kie-server的发布方式变化

书接swarm https://cloud.tencent.com/developer/news/475316 swarm的集群部署非常简单,但领导说docker和 docker swarm都不想用 换k8s ok 哦另外, k8s的CRI运行时 也不用docker 而是用containerd 完成. 但发现一个问题 ,k8s没有暂停pod的概念. 同时containerd没有暂停容器的…

Scrum of Scrums规模化敏捷开发管理全流程

Scrum of Scrums是轻量化的规模化敏捷管理模式,Leangoo领歌可以完美支持Scrum of Scrums多团队敏捷管理。 Scrum of Scrums的场景 Scrum of Scrums是指多个敏捷团队共同开发一个大型产品、项目或解决方案。Leangoo提供了多团队场景下的产品路线图规划、需求管理、…

可选择的Elasticsearch好用的可视化客户端工具

前言 常言道:工欲善其事,必先利其器。对于我们开发和测试同学来说,在日常的工作中有一款趁手的工具那真实如虎添翼啊,工作效率可是蹭蹭蹭的往上长,节省下来的时间摸摸鱼该有多好啊。最近我们系统开始使用elasticsearc…

【计算机网络-数据链路层】广域网(WAN)

文章目录1 广域网的概念2 PPP 协议2.1 PPP 帧的格式2.2 PPP 帧的透明传输2.2.1 面向字节的透明传输——字符填充法2.2.2 面向比特的透明传输——零比特填充法2.3 PPP 协议的工作状态1 广域网的概念 广域网(Wide Area Network,WAN)&#xff0…

【python】面向对象编程,这么大一个对象你不要嘛?

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 万物皆是对象,Python当然支持面向对象编程。 类和对象是面向对象编程的两个主要方面,类创建一个新的对象,对象是这个类的实例。 对象可以使用类的变量,属于对象或类的变量…

MyBatis01 学习遇到的错误

错误1 java.lang.NullPointerException at com.utils.MybatisUtils.getSqlSession(MybatisUtils.java:34) at com.dao.UserDaoTest.test(UserDaoTest.java:14) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.…

进程间通信方式

每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。 管道 管道传输数据是单向的,如果想相互通信,我们需要创建两个管道才行。 「|」表示的…