反射反射,程序员的快乐。
搞不懂反射,怎么能快乐?
什么是反射?
Java的反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。
反射机制提供的主要功能
-
在运行时判断任意一个对象所属的类;
-
在运行时构造任意一个类的对象;
-
在运行时判断任意一个类所具有的成员变量和方法;
-
在运行时调用任意一个对象的方法;
意义
-
反射机制极大的提高了程序的灵活性和扩展性,降低模块的耦合性,提高自身的适应能力
-
通过反射机制可以让程序创建和控制任何类的对象,无需提前硬编码目标类
-
使用反射机制能够在运行时构造一个类的对象、判断一个类所具有的成员变量和方法、调用一个对象的方法
-
反射是构建框架技术的基础所在,使用反射可以避免将代码写死在框架。
特点
1、性能问题
Java反射机制中运用了一些动态类型,所以JVM不能够对这些动态代码进行优化。因此,反射操作的效率要比正常操作效率低很多。我们应该避免在对性能要求很高的程序或者经常被执行的代码中使用反射。
2、安全限制
使用反射通常要求程序的运行没有安全方面的要求,如果一个程序对安全性提出要求,最好不要使用反射
3、程序健壮性
反射代码破坏了Java程序结构的抽象性,所以当程序运行的平台发生变化的时候,由于抽象的逻辑结构不能被识别,代码产生的效果与之前会产生差异