什么是反射?
Java 的反射机制可以使得程序在 Java 运行时能够检测、访问并且修改编译时完全未知的 classes,这个概念很容易和内省混淆。下面是 WiKi 上对这两个概念给出的定义:
反射(Reflection):反射是指计算机程序在运行时可以访问、检测和修改它本身状态或行为的一种能力。
内省(Introspection):内省是指计算机程序在运行检查对象类型的一种能力,通常也可以称作运行时类型检查。
从上面的定义可以看出,相对于内省,反射更进一步。例如,Java 具有反射特性,而 C++ 不具有反射特性只具有内省特性。
反射有什么用途?
反射主要提供以下功能:
在运行时检查对象的类型
在运行时新建类的实例
在运行时检测对象一个类的成员变量和方法
在运行时调用对象的任意方法
在运行时修改构造函数、成员变量和方法的访问权限
等等