Java中的反射机制

news2024/10/6 18:26:56

获取字节码文件对象的三种方式

 

 1,(常用)源代码阶段,Class.forName("全类名")

2,(传参)加载阶段 类名.class

3,(前提有对象)运行阶段 对象.getClass()


Java反射机制(动态获取类的信息)

         框架需要处理任意类,而框架只知道类的地址,就需要对不同的类进行创建对象,方法调用。

        框架通过反射机制,在只知道类地址的情况下,就可以操作类。 

        框架可以通过反射机制在写一套处理程序后,就可以达到以不变应万变。

        java的反射机制在运行状态中,可以动态获取任意类的信息,并且可以创建对象,还可以调用任意对象的方法和属性。这种动态获取,调用的机制称java反射机制。(反向使用类)

反向使用类的前提:获取Class字节码对象。

Class类中的方法

        constructor.setAccessible(true);//设置指定构造方法为允许访问   暴力反射:表示临时取消权限校验
        constructor.getModifiers();//获取构造方法的权限修饰符
        adminClass.getConstructor();//获取指定参数个数的公共构造方法(public)
        adminClass.getDeclaredConstructor();//获取指定参数个数的所有构造方法(包括私有)
        adminClass.getConstructors();//获取所有公共构造方法
        adminClass.getDeclaredAnnotations();//获取所有构造方法
        adminClass.getFields();//获取所有属性,返回的是一个Field类型的数组
        adminClass.getField("gender");//获取公共权限指定名称的属性
        adminClass.getDeclaredFields();//获取所有属性
        adminClass.getDeclaredField("gender");//获取指定属性名称的属性
        adminClass.getMethod("getAds");//获取指定公共方法
        adminClass.getMethods();//获取所有公共方法
        adminClass.getDeclaredMethod("getAccount");//获取指定方法
        adminClass.getDeclaredMethods();//获取所有方法
public class test3 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class adminClass = Class.forName("com.ffyc.mybatis.model.Admin");//获取Admin类的Class对象
        Constructor constructor=adminClass.getConstructor();//获取类的一个无参构造方法(公共的)
        Object obj=constructor.newInstance();//新建一个对象

        constructor = adminClass.getDeclaredConstructor(int.class);//获取有一个参数的构造方法(包括私有)
        constructor.setAccessible(true);//设置私有的为允许访问
        obj = constructor.newInstance(10);//新建一个对象
        System.out.println(obj.toString());
        System.out.println(adminClass.getDeclaredConstructors().length);//获取所有构造方法(包括私有)
    }
}

暴力反射:表示临时取消权限校验。

.setAccessible(true);

 

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

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

相关文章

LeetCode算法心得——全排列(回溯型排列)

大家好,我是晴天学长,排列型的回溯,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .全排列 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按…

外贸企业GMS认证|SD-WAN专线解决方案支持 IPv6、IPv4

IP地址是英文internet protocol的缩写,是网络之间互连的协议。互联网诞生后,很长一段时间都是使用v4版本的IP协议,也就是 IPv4 ,目前全球使用互联网的人数达到了48.8亿,而IPv4的地址库总共约43亿个地址,每个…

CCLink转Modbus TCP网关_MODBUS报文配置

兴达易控CCLink转Modbus TCP网关是一种功能强大的设备,可实现两个不同通信协议之间的无缝对接。它能够将CCLink协议转换为Modbus TCP协议,并通过报文配置实现灵活的通信设置。兴达易控CCLink转Modbus TCP网关可以轻松实现CCLink和Modbus TCP之间的数据转…

竞赛 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其…

2011年09月06日 Go生态洞察:Go语言的反射法则

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

STM32——STM32F4系统架构

文章目录 前言STM32F4XX系统架构 前言 本篇文章为STM32F4系列的系统架构,因为最近在学习F4的板子,暂时先更F4的,有需要F1的后续再更新。 主系统由 32 位多层 AHB 总线矩阵构成,可实现以下部分的互连: STM32F4XX系统架…

(自适应移动端)响应式门窗定制pbootcms板 门窗门业网站板下载-带视频功能

(自适应移动端)响应式门窗定制pbootcms模板 门窗门业网站模板下载-带视频功能 PbootCMS内核开发的网站模板,该模板适用于门窗门业网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; 自适应移动端,…

款网络拓扑自动扫描工具

Topology-Scanner是WeOps团队免费开放的一个网络拓扑自动扫描模块,可以自动发现网络设备的类型、网络设备之间的互联 使用方式 java -jar ./topology-scanner.jar --config_path./config/ 配置说明 1. 拓扑发现请求参数文件(request.json) ips [全网发现] 模式时…

2023/11/10 JAVA学习

取文件夹本身大小 打开文件 文件改名案例 输出流,文件依照你起的文件名自动创建 哪个流后创建,哪个流先关闭 虚拟机退出跑不了 finally别返回值

记一次上位机软件线程泄露的分析及解决

上位机软件在客户现场隔一段时间说操作了没反应,但是上位机又没死,出现了一些奇怪现象: 左上角的时间不走了(本来是1s运行一次)使用任务管理器查看,内存占用1.5G,线程有3000多个,正常情况下&am…

【chat】2:vs2022 连接远程ubuntu服务器远程cmake开发

大神们是使用vs远程连接和调试的:C++搭建集群聊天室(三):配置远程代码编辑神器 VScode我尝试过vs++ 和 clion 都不错。在 Visual Studio 中配置 Linux CMake 项目 比较麻烦的就是要配置CMakeSettings.json ,而且会自动做复制指定远程 Linux 目标,则会将源复制到远程系统 …

【K8s集群离线安装-kubeadm】

1、kubeadm概述 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令快速完成一个kubernetes集群的部署。 2、环境准备 2.1 软件环境 软件版本操作系统CentOS 7Docker19.03.13K8s1.23 2.2 服务器 最小硬件配置:2核CPU、2G内存…

软件研发团队适用的项目管理工具推荐

Zoho Projects是一款专为大型产研团队设计的项目管理工具,它也是许多软件开发行业高速成长背后的生产线。与其他项目管理产品相比,Zoho Projects最大的不同之处在于其独特的流程设计。在软件上线初期,Zoho Projects能够有效地帮助软件研发公司…

xcorr函数的用法和程序举例

xcorr函数的用法和程序举例 xcorr函数返回两个离散时间序列的互相关。互相关测量向量 x 和移位(滞后)副本向量y 的之间的相似性,形式为滞后的函数。如果 x 和 y 的长度不同,函数会在较短向量的末尾添加零,使其长度与另…

代码随想录-广度优先搜索理论基础及相关习题

广度优先搜索理论基础 广搜的搜索方式就适合于解决两个点之间的最短路径问题。因为广搜是从起点出发,以起始点为中心一圈一圈进行搜索,一旦遇到终点,记录之前走过的节点就是一条最短路。 广搜是一圈一圈的遍历方式,如下图&#x…

香港科技大学广州|机器人与自主系统学域博士招生宣讲会—武汉大学专场!!!(暨全额奖学金政策)

在机器人和自主系统领域实现全球卓越—机器人与自主系统学域 硬核科研实验室,浓厚创新产学研氛围! 教授亲临现场,面对面答疑解惑助攻申请! 一经录取,享全额奖学金1.5万/月! 🕙时间:…

C#时间类的使用方法

在C#编程中,日期和时间的处理是常见的任务之一。C#提供了多个类来处理日期、时间和时区的操作,包括DateTime、TimeSpan和DateTimeOffset。 目录 1. DateTime类1.1 创建DateTime对象1.2 获取日期和时间信息1.3 格式化日期和时间1.4 比较日期和时间 2. Tim…

The Sandbox于香港举办全球首个创作者日,推出「公开发布」功能,并为 GameMakerFund提供1亿$SAND基金!

新的 NFT 铸造、无需编码的 Game Maker 软件升级、其他支持 Web3 创作者的功能优化。 2023 年 11 月 3 日——The Sandbox 举办了首届全球创作者日活动,并在活动期间宣布了其在 2024 年的计划,包括为创作者赋能,在地图上呈现 2000 个用户生成…

Unity 制作血量滑动条(Slider)

1.创建UI slider 层级面板点击右键-UI-slider 2.调整UI位置 选择2D视图,调整锚点和滑动条位置 3.PS中制作UI 导出2个图层,PNG格式。 4.改成精灵模式(sprite2d) 把两个PNG导入Unity仓库中,选中两个图,右…

双11狂欢最后一天

大家好,本年度双11即将到来,为了答谢大家多年来的支持及更广泛的推广VBA的应用,“VBA语言専功”在此期间推出巨大优惠:此期间打包购买VBA技术资料实行半价优惠。 1:面向对象:学员及非学员 2:打…