反射是啥?
反射既然有“反”,就说明它是一个逆向的过程。那我们先来看看正向过程是怎样的。
设计一个类,类实例化成对象,对象调方法或属性去实现一些功能。
那反射是什么呢?
不知道大家是否还记得上图,这是刚接触java时学到的知识。我自己的理解是现在是知道1,反推到2,然后再通过2得到一些别的信息。(这只是我的推测,至于具体是不是,还需日后深究)
类比到现实中的场景是:
你:妈妈,你知道剪刀在哪吗? 妈妈:我那天放针线的时候好像在针线盒里看到了,你去找找有没有。针线盒在客厅的茶几上。 你:好的。
然后你从“针线”推导出了“针线盒”,再从“针线盒”中找到了“剪刀”。
我们的反射就是:从类或对象中推导出Class类,然后再从Class类中获得类的信息。
更迷糊了?不急,请往下看。
找到针线盒——获取Class类
先开始说Class类是什么?
Class类就是People类的类,就像People类是p的类一样。Class类是p的“爷爷”。
我们可以这样理解:java.lang.Class的实例对象是People,People的实例对象是p。我们的思路就是通过People类或p对象获得Class类,然后再通过Class类获取People类的信息,比如属性,方法,构造函数等等。
知道了Class类是什么,那我们说说怎么才能获取它。
找到Class类有3种方法:
值得一提的是,c1、c2、c3叫做People类的“类类型”。好了,现在我们总结一下已知条件:
People:类
p:对象
c:类类型
找到剪刀——获取People类的信息
应用一:获取类的全部方法
在获取People类的方法中,ms是一个存放着People类方法的数组,通过循环,一层层获取它的名称、参数类型、返回值。
最后直接在main函数中调用即可
得到的部分结果如下:
应用二:获取类的全部属性
调用和调用方法类似:
运行结果:
应用三:获取类的构造函数
构造函数类似,不再赘述。
应用四:获取类的某个特定方法
运行结果如下,两种调用方式结果相同:
以上只是对个别功能的列举,更具体的可以去API文档中寻找:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
反射的概念
在文章的最后,我们总结一下反射的概念,让思想升华一下。
反射的定义是什么?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,这种动态获取、调用对象方法的功能称为java语言的反射机制。
反射存在的必要性?
“反射机制是很多java框架的基石”。
(1)在xml文件或者properties里面写好了配置,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射机制,根据这个字符串获得某个类的Class实例,这样就可以动态配置一些东西,不用每一次都要在代码里面去new或者做其他的事情,以后要改的话直接改配置文件,代码维护起来就很方便了。
(2)有时候要适应某些需求,Java类里面不一定能直接调用另外的方法,这时候也可以通过反射机制来实现。
反射的缺点?
我们在代码中也能看到,反射的代码比正常调用的代码更多,性能也慢,所以应避免使用反射。这就相当于如果你本来就知道剪刀在哪,就没必要再通过针线——针线盒——剪刀这条路了。
是否使用反射的标准是啥?
如果一个功能可以不用反射完成,那么最好就不用。
php中文网,大量的免费Java入门教程,欢迎在线学习!
以上是什么是java反射的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。