“请你Java反射的优缺点?”
这是一个工作了5年的同学,去阿里面试第一面遇到的问题。
今天这篇文章给大家分享一下我们遇到这个问题该怎么回答,才能获得面试官的认可。
另外经常有同学在后台跟我吐槽在求职过程中遇到的各种面试难题。
我发现大部分的问题之前的文章都有分析过,考虑到文章可能太过分散,不方便大家学习,所以我系统整理了一份20万字的文档有需要的Si信我发送“Mic”领取。
问题分析
反射是Java语言里面比较重要的一个特征。
它能够在程序运行的过程中去构造任意一个类对象、并且可以获取任意一个类的成员变量、成员方法、属性,以及调用任意一个对象的方法。
通过反射的能力,可以让Java语言支持动态获取程序信息以及动态调用方法的能力。
在Java里面,专门有一个java.lang.reflect用来实现反射相关的类库,包括Construct、Field、Method等类,分别用来获取类的构造方法、成员变量、方法信息。
反射的使用场景还挺多的,比如在动态代理的场景中,使用动态生成的代理类来提升代码的复用性。
在Spring框架中,有大量用到反射,比如用反射来实例化Bean对象。
高手:
Java反射的优点:
- 增加程序的灵活性,可以在运行的过程中动态对类进行修改和操作
- 提高代码的复用率,比如动态代理,就是用到了反射来实现
- 可以在运行时轻松获取任意一个类的方法、属性,并且还能通过反射进行动态调用
Java反射的缺点:
- 反射会涉及到动态类型的解析,所以JVM无法对这些代码进行优化,导致性能要比非反射调用更低。
- 使用反射以后,代码的可读性会下降。
- 反射可以绕过一些限制访问的属性或者方法,可能会导致破坏了代码本身的抽象性
总结
今天的文章就到这里了
喜欢我作品的同学记得转发、收藏、点赞
最新的资料文档已整理,包含如下↓(还在持续更新中!):
①100道最新大厂经典面试题解析资料文档!
②20万+字Java面试题解析和配套答案!
③从应届生到高级开发都适用的简历模板!
④从入门到精通的架构师学习路线图!
⑤还有各种技术流程图,路径图!
有需要的 Si 我 “Mic”拿!