什么是反射?
反射是java语言的特征之一,它允许java程序在运行时(不是在编译时)对自身检查并且对内部成员进行操作。就是在运行状态中,对于任何一个类,都可以知道这个类的属性和方法,并且可以直接操作任意对象的内部属性和方法。
反射机制有什么用?
在运行时判断一个对象所属的类型
在运行时构造任何一个类的对象
在运行是判断任何一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法,甚至可以调用private方法
生成动态代理
反射的应用
逆向代码,例如反编译
与注解相结合的框架,例如 Retrofit
单纯的反射机制应用框架,例如 EventBus
动态生成类框架,例如Gson
反射的优缺点
优点:
可以实现运行时动态创建对象,增加程序的灵活性和扩展性,降低模块耦合性,提高自身的适应能力。
反射机制是构建框架的基础所在,可以避免将程序写到死代码里。
反射允许程序创建和控制任何类的对象,无需提前硬编译目标类。
缺点:
在性能上,反射包括了一些动态类型,所以JVM无法对这些代码进行优化,因此,反射的效率要比那些非反射的操作低很多,应该避免在经常被执行的代码和对性能要求很高的程序中使用反射。
在程序内部逻辑上,程序人员希望在源代码里面看到程序的逻辑,反射等绕过了源代码的技术,因此会带来维护问题,反射代码比相应的直接代码更加复杂。
在安全限制上,使用反射要求程序必须在一个没有安全限制的环境中运行。如果一个程序对安全性提出要求,那最好不要使用反射。
使用反射会导致内部暴露,由于反射允许代码执行一些正常情况下不被允许的操作(比如访问私有的属性和方法),所以反射可能会导致一些意料之外的副作用—代码有功能上的错误,降低了可移植性。反射代码破坏了java程序结构的抽象性,所以当程序的运行平台发生变化时,由于抽象的逻辑结构不能被识别,代码产生的效果与之前可能会产生差异。
4676

被折叠的 条评论
为什么被折叠?



