[Java基础揉碎]反射

news2024/11/26 9:28:32

目录

引出反射机制​编辑

介绍反射机制​编辑

反射的优点和缺点 (反射调用优化 )​编辑

Class类

class常用方法

​编辑

​编辑 获取class类对象的不同方式

哪些类型有class对象

​编辑

类加载

​编辑类加载流程图

类加载的五个阶段

​编辑

通过反射获取类的结构信息 ​编辑

反射爆破创建实例​编辑

反射爆破操作属性

反射爆破操作方法


引出反射机制

这里有一个需求, 根据配置文件的信息, 创建Cat对象并调用hi方法

先尝试不用反射用现有的技术看能否实现:

新建一个类, 创建一个properties文件, 里面有这两个内容: 类的全路径和方法名

新建一个文件所引用的那个cat类, 里面有hi方法

新建一个类, 用于尝试实现上面的要求

根据传统的方式, 我们想要创建Cat对象并调用hi方法需要new一个对象, 再去调用这个方法

我门用io流的Properties类来读出文件的内容

得到这个类的全路径名时可以这样创建对象

但是却没办法这样创建对象, 因为classfullpath是一个string类型,尽管它的值等价与上面的com.hspedu.Cat(), 但是它却不是一个类

 使用反射解决, 通过加载类得到class类型的对象, 在通过class得到加载类的com.hspedu.Cat()实例
这里得到的o的运行类型就是cat

此时已经成功创建了cat对象了, 那么我们怎么得到它的hi方法呢? 传统的方式我们通过点出的方式得到得个hi方法, 但是这样处理有一个问题, 因为你是文件中读取的, 实际上你不知道你要调用的方法是hi方法, 也可能是其他的方法, 点的方式是只能你知道这个方法名的时候才能去选择点出哪一个方法

(改一下方法名)

所以我们通过反射这个方式, 通过方法名得到方法对象, 通过方法去点invoke对象得到方法, 正常是对象去点方法, 这里是方法对象去点invoke对象

 有这样的方式很牛, 牛就牛在可以通过外部文件,在不修改源码的情况下, 来控制程序, 如果没有这个机制spring, mybatis都不存在, 是框架的灵魂

介绍反射机制

 

除上面引出用到方法其余的使用示例: 

(类中有这两个构造器)

反射的优点和缺点 (反射调用优化 )

我们用传统的方法来调用hi测试它的耗时 

用反射的方式来测试它的耗时 

 可以看到速度区别很大

反射适当调用优化 

在写一个关闭了访问检查的反射方法测试耗时

 

Class类

class常用方法

 获取class类对象的不同方式(☆☆☆重要)

计算机执行有三个阶段, 可以在不同阶段通过不同方法得到对应的类对象

 

 

 

 

哪些类型有class对象

类加载

类加载流程图

类加载的五个阶段

 

ClassLoad02:

 

通过反射获取类的结构信息 

 

 

 

 

反射爆破创建实例

示例:

 

 

反射爆破操作属性

 

 

反射爆破操作方法

 

 

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

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

相关文章

合芯科技冯春阳博士受邀出席苏州大学技术分享会

近日,苏州大学电子信息学院与合芯科技苏州公司成功举办“新时代与‘芯’相遇,科技赋能向未来”的技术分享会。合芯科技冯春阳博士进行了主题为“高性能CPU关键技术与发展现状”的专题分享,并参加导师聘请仪式。苏州大学电子信息学院党委副书记…

【ONLYOFFICE 8.1】的安装与使用——功能全面的 PDF 编辑器、幻灯片版式、优化电子表格的协作

🔥 个人主页:空白诗 文章目录 一、引言二、ONLYOFFICE 简介三、安装1. Windows/Mac 安装2. 文档开发者版安装安装前准备使用 Docker 安装使用 Linux 发行版安装配置 ONLYOFFICE 文档开发者版集成和开发 四、使用1. 功能全面的 PDF 编辑器PDF 查看和导航P…

如何做好新闻软文宣发媒体资源筛选?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传加速季,100万补贴享不停,一手媒体资源,全国100城线下落地执行。详情请联系胡老师。 新闻软文宣发是指企业通过创造或利用新闻事件&#xff0c…

使用systemd管理Linux下的frps服务:安装、配置及自动化操作指南

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。以下是具体的操作步骤: 1. 安装 systemd 如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 Cent…

stm32 No traget connected/debug识别不到串口的问题

关于stm32串口识别不到,第一步先确定是否线接错(stlink与stm32接口对应),如果确认接线没有问题的话,可以使用以下方法,成功率较高。 首先将stlink的boot0置1,就是把跳线帽换到高电平这一侧&…

[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式4599张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4599 标注数量(xml文件个数):4599 标注数量(txt文件个数):4599 标注…

编写一个基于其他系的linux系统并且把它打包为一个iso镜像思想

目录 前面写的一篇文章 前言 isolinux引导模式启动流程 为什么要initramdisk操作而不直接加载文件系统 编写系统的思想 可能问题 一般的iso镜像目前只支持最大4G的大小,需要怎么解决? 如何去找驱动 木木em哈哈想说的话(与本博文无光&…

详细分析SpringBootTest中的测试类(附Demo)

目录 前言1. 基本知识2. Demo3. 实战3.1 项目测试3.2 功能测试 前言 书写测试类,一般只需要加入Test即可,但是结合Springboot项目来整体测试对应需要怎么下手 详细的Java知识点推荐阅读:java框架 零基础从入门到精通的学习路线 附开源项目面…

[CAN] 通讯协议手动解析与手动打包 [手撕编码格式]

手动解析与手动打包 一、Intel格式编码1.1 报文解析。1.2 报文打包二、Motorola格式通讯协议2.1 报文解析。2.2 报文打包🙋 前言 CAN有两种编码格式:Intel编码格式 和 Motorola编码格式,本教程将分别对两种格式进行手动解析与手动打包。 一、Intel格式编码 假设已知雷达CAN…

【C++题解】1721. 输出个位为5或者个位为8数

问题:1721. 输出个位为5或者个位为8数 类型:简单循环 题目描述: 请从小到大输出 1∼n 中所有个位为 5 或者个位为8 的所有的整数,每行 1 个。 比如,假设 n20,那么满足条件的数输出如下: 5 8 1…

【多线程】如何解决线程安全问题?

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. synchronized 关键字1.1 锁是什么1.2 如何加锁1.3 synchronized 修饰方法1) 修饰普通成员方法2) 修饰静态…

Rust 程序设计语言学习——泛型、Trait和生命周期

每一种编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是泛型。泛型是具体类型或其他属性的抽象替代。 Trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 Trait 以一种抽象的方式定义共同行为。可以使用 trait bounds 指定泛型是任何拥有特定行为…

Java——IO流(一)-(8/8):释放资源-try-catch-finally、try-catch-resource

目录 try-catch-finally 介绍 实例演示1 实例演示2 try-catch-resource 介绍 实例演示 try-catch-finally 介绍 普通的释放流的方法可能会因中间的异常或是其他原因,导致程序执行不到释放流的代码就结束了,会有资源浪费的风险,所以建…

入门JavaWeb之 JavaBean 实体类

JavaBean 有特定写法: 1.必须有一个无参构造 2.属性必须私有 3.必须有对应的 get/set 方法 一般用来和数据库的字段做映射 ORM:对象关系映射 表->类 字段->属性 行记录->对象 连接数据库 没有的话去 Settings -> Plugins 搜索 Data…

JavaScript--js基础(详细 全面)

目录 前言: JavaScript 是什么?JavaScript 简介 1.JavaScript历史 2.JavaScript 具有以下特点 第一个JavaScript程序 1.在脚本文件中编写JavaScript代码 2.JavaScript代码执行顺序 基本语法 1.变量 2.数据类型 3.算术运算符 4.赋值运算 5.字符串运算符 6…

GoSync+华为智能穿戴使用指导

GoSync官方简介: GoSync 是一款免费应用程序,主要用于将您的可穿戴设备中的步行、跑步、骑自行车和游泳等活动数据同步到您的 Google Fit 和其他健身平台。在开始同步数据之前,您需要将您的可穿戴设备账户与您的健身平台账户连接起来。在创建…

Modbus为何要转成EtherCAT

1. Modbus是什么? Modbus是一种工业通信协议,广泛应用于工业自动化领域。它支持多种通信方式,包括RS-232、RS-485和TCP/IP等。Modbus协议简单易用,能够实现设备之间的数据交换和控制命令的传输。然而,它在数据传输速率…

微软推出最新视觉基础模型Florence-2 可在浏览器运行

据微软官方消息,微软推出视觉基础模型Florence-2,该模型现已能够在支持WebGPU的浏览器中100%本地运行。Florence-2-base-ft是一个拥有2.3亿参数的视觉基础模型,采用基于提示的方法来处理广泛的视觉和视觉语言任务。 该模型支持多种功能&…

FME实现批量合并shapefile文件数据,并提取原文件名,输出到属性表字段中的解决方法

目录 一、实现效果 二、实现过程 1.读取数据 2.暴露文件名属性 3.设置文件名字段 4.输出成果 5.模板的使用 三、总结 今天来介绍如何使用FME软件来实现对多个shapefile数据进行批量合并,同时提取原文件名并存储到合并后shapefile数据属性表字段中的方法&…

由监官要求下架docker hub镜像导致无法正常拉取镜像

问题:下载docker镜像超时 error pulling image configuration: download failed after attempts6: dial tcp 202.160.128.205:443: i/o timeout解决办法:配置daemon.json [rootbogon aihuidi]# cat /etc/docker/daemon.json {"registry-mirrors&qu…