什么是java反射
反射是啥?
反射既然有“反”,就说明它是一个逆向的过程。那我们先来看看正向过程是怎样的。
设计一个类,类实例化成对象,对象调方法或属性去实现一些功能。
那反射是什么呢?
不知道大家是否还记得上图,这是刚接触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
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

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

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

胶囊是一种三维几何图形,由一个圆柱体和两端各一个半球体组成。胶囊的体积可以通过将圆柱体的体积和两端半球体的体积相加来计算。本教程将讨论如何使用不同的方法在Java中计算给定胶囊的体积。 胶囊体积公式 胶囊体积的公式如下: 胶囊体积 = 圆柱体体积 两个半球体体积 其中, r: 半球体的半径。 h: 圆柱体的高度(不包括半球体)。 例子 1 输入 半径 = 5 单位 高度 = 10 单位 输出 体积 = 1570.8 立方单位 解释 使用公式计算体积: 体积 = π × r2 × h (4

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

Java是热门编程语言,适合初学者和经验丰富的开发者学习。本教程从基础概念出发,逐步深入讲解高级主题。安装Java开发工具包后,可通过创建简单的“Hello,World!”程序实践编程。理解代码后,使用命令提示符编译并运行程序,控制台上将输出“Hello,World!”。学习Java开启了编程之旅,随着掌握程度加深,可创建更复杂的应用程序。
