反射:替对象执行方法

简介: 反射:替对象执行方法

反射,可不只是利用Class创建对象哟,更重要是替对象执行方法!关于反射创建对象,它可以提供一种通用的机制,对任意Class对象得到它的实例,而不需要import。


举个例子,Spring底层就是利用反射为我们工程中的类创建实例,但Spring内部可从来没有import我们的类(事实上也不可能,世界上用Spring的工程何其多!)。


这是一种运行时创建实例的机制,可以摆脱编译依赖带来的限制,提供一种更为通用的对象创建途径。


但反射除了替类创建实例外,还有一个更为重要的能力:替对象执行方法!相比“替类创建实例”,“替对象执行方法”更能体现“反射”中“反”这个字的内涵。作为一门面向对象语言,Java的对象职责可以简略说成:封装数据和行为。而方法作为一种行为描述,是所有对象共有的,不属于某个对象独有。比如现有两个Person实例:


Person p1 = new Person();
Person p2 = new Person();

假设Person有两个字段 name、age,有一个方法:changeUser()


对象 p1保存了"hst"和18,p2保存了"cxy"和20,但是不管是p1还是p2,都会有changeUser(),而每个对象里面写一份太浪费。


既然是共性行为,可以抽取出来,放在方法区共用。但这又产生了一个棘手的问题,方法是共用的,JVM如何保证p1调用changeUser()时,changeUser()不会跑去把p2的数据改掉呢?


为了解决这个问题,Java设计了一种隐性机制,每次对象调用方法时,都会隐性传递当前调用该方法的对象参数,方法可以根据这个对象参数知道当前调用本方法的是哪个对象!


8.png

同样的,在反射调用方法时,本质还是希望方法处理数据,所以必须告诉它去处理哪个对象的数据。

9.png

反射API中,有个Method对象,它就像一个方法执行器,当你想要执行某个对象的某个方法时,根本不要求这个对象本身,而是去找到Method,告诉它:帮我找到老默,告诉他我想......


啊不,说错了,应该是:找到Method,把对象+参数告诉它,Method帮你执行。


这就像什么呢?有一个老师傅,一直不肯使出本门剑法的最后一招。正常来说,你要求他:师傅,请你调用一下剑法的最后一招让徒孙开开眼吧!


现在有了反射,你就不用求他了,直接找到Method,把师傅绑了,并且找到师傅的剑,人和剑一块儿都塞给Method,然后Method催动内力,逼着师傅拿着剑把最后一招耍出来了。


10.png

10.png

相关文章
|
Java
java枚举的使用
java枚举的使用
88 0
|
编解码
PR2023版一键安装PR2023PR软件最新版安装教程PR软件下载教程免费版
Premiere Pro提供了丰富的视频编辑功能,包括编辑、修剪、调色等。它支持多个视频和音频轨道,可以实现多重媒体编辑。用户可以使用它来调整视频的裁切、旋转、速度、动画等属性,拥有自由度极高的编辑空间。
955 0
|
Java 编译器
解析用GraalVm编译的class文件
这篇文章介绍了如何使用`javap`工具反编译由GraalVM编译的`.class`文件,详细展示了`javap`的用法和输出内容,包括类声明、版本信息、访问标志、类层次结构、接口、字段、方法、属性以及常量池等信息。
172 0
解析用GraalVm编译的class文件
|
存储 物联网 计算机视觉
|
前端开发 JavaScript 开发工具
vscode教程(含使用技巧、保存时自动格式化文件等设置)
vscode教程(含使用技巧、保存时自动格式化文件等设置)
1282 0
|
Go API C++
实现第一个shellcod Loader
上一篇文章说了,我们说到了什么是shellcode,为了使我们的shellcode加载到内存并执行,我们需要shellcode加载器,也就是我们的shellcode loader。当然编写Loader不止局限于C/C++,你也可以使用Python、Golang等语言编写加载器
455 0
|
Python
【代码】利用Python每天自动发新闻到邮箱
【代码】利用Python每天自动发新闻到邮箱
110 0
|
机器学习/深度学习 弹性计算 负载均衡
购买阿里云服务器价格参考,活动价2000元左右的阿里云服务器分享
购买阿里云服务器需要多少钱,如果你计划购买一台价格在2000元左右的阿里云服务器,目前活动价格在2000元左右的阿里云服务器大概有16台,月付最低只要1814.00元可购买一台通用算力型u1实例8核32G配置的云服务器1个月,年付则可买到2核2G、2核4G和2核8G配置,如果购买其他系列的云服务器,最长可以买到计算型c8y实例1核2G配置云服务器3年,最低价格只要2147.76元。下面是2023年截至目前,活动价格在2000元左右的阿里云服务器分享。
405 0
购买阿里云服务器价格参考,活动价2000元左右的阿里云服务器分享
|
前端开发 JavaScript 开发者
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(1)
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(1)
233 0
|
Windows
windows计划任务所遇到的闪退、触发器没有按时执行的坑
1、如图:在设置执行程序或脚本时,请一定要给起始于这个bat脚本的目录路径,否则会遇到执行计划任务闪退,对于网上给的尾行加pause也是心很累。
896 0
windows计划任务所遇到的闪退、触发器没有按时执行的坑