反射机制

反射机制是能够帮助我们把代码变得更加灵活,可扩展性更高,俗称“软编程、软写法”。例如:有一个文件里面有一些值,想要把这些值赋值到一个Student类的属性中,按照以前所学到的知识点,只能是通过文件流将文件里的值读取出来,然后再通过set方法将这些值都赋给Student类的属性。但是,这种方式是将代码写死了,在这之后会有一个问题就是如果文件里的内容发生变动,或者要把这个Student类更换成Dog类的话,就要重新修改代码。程序写好了部署到服务器上运行了,总不能时不时就打开来修改吧。

示意图:

bdf308eca83ec77425628f1337d6fb3f.png



那么要解决这个问题,就得使用到反射机制,在怎么使用反射机制解决这个问题之前,我们先学习一个类,这个类名叫Class,注意这是类不是class关键字。每一个类都能获得Class对象,通过这个对象就可以操作那个类。例如:Dog类可以获得Class对象,通过这个对象可以构建Dog类的对象,还可以对Dog类的属性进行赋值,对方法能够进行调用等等,还能获得这个类的所有的信息,比如这个类的父类是哪个,实现了什么接口,路径在哪等等。

获得Class对象的方法有三种,但是其中两种是死写法,一种是软写法,软写法是因为使用的字符串描述的类名,字符串是可以变动的,要更改类的时候只需要更改字符串即可。

  代码示例:

e781adeb88540dc1a5a97186716fe4d8.png


使用这个对象可以获得Test类的信息:

daf99c6e476a765bcfaee61a56443bfe.png


运行结果:

5d127596637a621c8a93be9a45120add.png


使用这个对象可以获得Test类的成员:fda505a5ad9935ae9ba1679560e7d910.png


运行结果:

d794d7f9cb738dd82ec0a9c9ee8de02d.png


使用这个对象还可以对某个类的的属性进行赋值,还能调用方法和构造器,还能给方法和构造器传递参数。我们做个试验:声明一个Student类,在这个类里写一些属性、方法和构造器,然后通过Test类来进行赋值、调用和传递参数。

  Student类代码示例:

e00bff5068505cad92398035d456b24d.png


Test类代码示例:

9305509be262ce717a619d07bc7b325f.png


运行结果:

42b1ba3c43a02c07a9bbc47b10521553.png


现在我们就可以运用以上的知识点来解决一开始的那个问题了,先编辑一个文本里面写一些属性值,然后再写一个Teacher类写上对应的属性,然后将属性进行封装,然后写一个Test类通过Class对象来对Teacher类的属性进行赋值。

  文件内容:

273009532f0889e65c957ad3c60fa645.png


Teacher类代码示例:

3371ce3aa82ab5745091f6adf0150171.png

328cc54e566fc5dbc76d9804f2bb1933.png


Test类代码示例:

ee868fc4e7a8cbacdf896e9e06cb1d14.png


运行结果:

ab15bebeb352b71008b67337c7bccb0d.png



本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1976631,如需转载请自行联系原作者

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值