面试官:什么是反射,为什么要用反射,举一个例子?
当问到这个问题,我的第一感觉是这个我懂,因为项目中用到好几次,但是让我真正讲的时候,问题就暴露出来了,有些东西你感觉你都知道,但是当让你讲给别人的时候你发现你很难讲明白,这其实就是在学习过程中只有输入没有输出,单纯的学东西,没有思考没有总结。
今天针对这个反射的问题做个总结;
1、什么是反射?
官方解释:
JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
我理解的反射就是程序在运行时,可以根据类的全限定名称,动态地加载该类,创建对象,并可以调用该对象中地任意属性和方法。
2、为什么要用反射?
-
在写代码地时候,如果我们使用了未定义的类,编译就会报错,Java地反射机制可以解决该问题。
-
反射使得代码更具通用性和灵活性。
3、举一个例子:
- 在我的项目中,通过反射加载各功能模块的操作界面,不使用反射机制通过代码也可以实现,但是问题是在代码中将程序写死,当你再想扩展功能的时候你必须修改之前的代码才可以实现,就会违背代码的设计的开闭原则—对扩展开放,对修改关闭。但是使用反射就完美的解决了这个问题,将按键对应的变量和其对应的类的全限定名称存放到数据库,在程序中从库中获取数据,对数据进行统一操作。扩展时只需要在数据库中对应位置添加写好的类的全限定名称即可。
总结:
- 学习需要一个漫长的积累过程,温故而知新,知识长时间不回顾就会遗忘,著名的艾宾浩斯遗忘曲线也证明了这一点。
- 有输出的学习才是真正的学习,不断总结,不断将知识转换成自己的东西并将其分享,相信我们会变得越来越好。