问题分析
反射是Java语言里面比较重要的一个特征。
它能够在程序运行的过程中去构造任意一个类对象、并且可以获取任意一个类的成员变量、成员方法、属性,以及调用任意一个对象的方法。
通过反射的能力,可以让Java语言支持动态获取程序信息以及动态调用方法的能力。在Java里面,专门有一个java.lang.reflect用来实现反射相关的类库,包括Construct、Field、Method等类,分别用来获取类的构造方法、成员变量、方法信息。
反射的使用场景还挺多的,比如在动态代理的场景中,使用动态生成的代理类来提升代码的复用性。
在Spring框架中,有大量用到反射,比如用反射来实例化Bean对象。
问题解答
Java反射的优点:
1、增加程序的灵活性,可以在运行的过程中动态对类进行修改和操作
2、提高代码的复用率,比如动态代理 ,就是用到了反射来实现
3、可以在运行时轻松获取任意一个类的方法、属性,并且还能通过反射进行动态调用
Java反射的缺点:
1、反射会涉及到动态类型的解析,所以JVM无法对这些代码进行优化,导致性能要比非反射调用更低。
2、使用反射以后,代码的可读性会下降
3、反射可以绕过一些限制访问的属性或者方法,可能会导致破坏了代码本身的抽象性