java反射如何实现的_java反射是怎么实现的

java反射是怎么实现的

发布时间:2020-06-29 11:43:56

来源:亿速云

阅读:105

作者:Leah

java反射是怎么实现的?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

反射是啥?

反射既然有“反”,就说明它是一个逆向的过程。那我们先来看看正向过程是怎样的。

设计一个类,类实例化成对象,对象调方法或属性去实现一些功能。

3925a94e498ea5253a5c82c2a214d656.png

那反射是什么呢?

42e9d17aa8b562e4cfc17bd2ae54e08f.png

不知道大家是否还记得上图,这是刚接触java时学到的知识。我自己的理解是现在是知道1,反推到2,然后再通过2得到一些别的信息。(这只是我的推测,至于具体是不是,还需日后深究)

类比到现实中的场景是:你:妈妈,你知道剪刀在哪吗?

妈妈:我那天放针线的时候好像在针线盒里看到了,你去找找有没有。针线盒在客厅的茶几上。

你:好的。

然后你从“针线”推导出了“针线盒”,再从“针线盒”中找到了“剪刀”。

1a5494f03115f1a25fd753c8706a4173.png

我们的反射就是:从类或对象中推导出Class类,然后再从Class类中获得类的信息。

更迷糊了?不急,请往下看。

找到针线盒——获取Class类

先开始说Class类是什么?

Class类就是People类的类,就像People类是p的类一样。Class类是p的“爷爷”。

7c4a00d88597ba13049a8a4d590bd4bb.png

我们可以这样理解:java.lang.Class的实例对象是People,People的实例对象是p。我们的思路就是通过People类或p对象获得Class类,然后再通过Class类获取People类的信息,比如属性,方法,构造函数等等。

知道了Class类是什么,那我们说说怎么才能获取它。

找到Class类有3种方法:

349b411746c615a60f243effc939ec08.png

值得一提的是,c1、c2、c3叫做People类的“类类型”。好了,现在我们总结一下已知条件:

People:类

p:对象

c:类类型

找到剪刀——获取People类的信息

应用一:获取类的全部方法

3ca8b4e351809a27735ed72c9950d5c9.png

在获取People类的方法中,ms是一个存放着People类方法的数组,通过循环,一层层获取它的名称、参数类型、返回值。

最后直接在main函数中调用即可

dff0ead05d910d6640bc4bb87603e3a9.png

得到的部分结果如下:

514ff376738dabb0532180a403359084.png

应用二:获取类的全部属性

be5a7d7386431ececb19c989721a63c3.png

调用和调用方法类似:

cf70bfbbcfaaa2ae4fc0bfce09e5d6b3.png

运行结果:

9b019d5d981ae91c8355b2fa1bdf8f08.png

应用三:获取类的构造函数

构造函数类似,不再赘述。

c1be1b8761a090ce4e6425ca28178a36.png

应用四:获取类的某个特定方法

f324fd9819f36b71bd7ed7045c7bea16.png

运行结果如下,两种调用方式结果相同:

6e83ab320554740771d4bd92efb876ac.png

以上只是对个别功能的列举,更具体的可以去API文档中寻找:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

6712cec6dbebea2baa38d8599d799b0e.png

反射的概念

在文章的最后,我们总结一下反射的概念,让思想升华一下。

反射的定义是什么?

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,这种动态获取、调用对象方法的功能称为java语言的反射机制。

反射存在的必要性?

“反射机制是很多java框架的基石”。

(1)在xml文件或者properties里面写好了配置,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射机制,根据这个字符串获得某个类的Class实例,这样就可以动态配置一些东西,不用每一次都要在代码里面去new或者做其他的事情,以后要改的话直接改配置文件,代码维护起来就很方便了。

(2)有时候要适应某些需求,Java类里面不一定能直接调用另外的方法,这时候也可以通过反射机制来实现。

反射的缺点?

我们在代码中也能看到,反射的代码比正常调用的代码更多,性能也慢,所以应避免使用反射。这就相当于如果你本来就知道剪刀在哪,就没必要再通过针线——针线盒——剪刀这条路了。

是否使用反射的标准是啥?

如果一个功能可以不用反射完成,那么最好就不用。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值