目录
一、概念
二、功能
三、反射相关的重要的类
3.1 class类
3.2 获取class类的方法
3.3 class类中的方法
3.4 Field类方法
3.5 打破封装
一、概念
反射库(reflection library)提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵Java代码的程序。这项功能被大量地应用于JavaBeans中,它是Java组件的体系结构。使用反射,Java可以支持Visual Basic用户习惯使用的工具。特别是在设计或运行中添加新类时,能够快速地应用开发工具动态地查询新添加类的能力。能够分析类能力的程序称为反射(reflective)。
二、功能
反射机制的功能极其强大,在下面可以看到,反射机制可以用来:
● 在运行时分析类的能力。
● 在运行时查看对象,例如,编写一个toString方法供所有类使用。
● 实现通用的数组操作代码。
● 利用Method对象,这个对象很像C++中的函数指针。
注意:反射是一种功能强大且复杂的机制。使用它的主要人员是工具构造者,而不是应用程序员。
三、反射相关的重要的类
注意:必须先获得Class才能获取Method、Constructor、Field
3.1 class类
在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行。然而,可以通过专门的Java类访问这些信息。保存这些信息的类被称为Class。
3.2 获取class类的方法
Object类中的getClass( )方法将会返回一个Class类型的实例。
调用静态方法forName获得类名对应的Class对象
注意:如果类名保存在字符串中,并可在运行中改变,就可以使用这个方法。当然,这个方法只有在className是类名或接口名时才能够执行。否则,forName方法将抛出一个checked exception(已检查异常)。无论何时使用这个方法,都应该提供一个异常处理器(exception handler)。
获得Class类对象的第三种方法非常简单。如果T是任意的Java类型(或void关键字), T.class将代表匹配的类对象。
注:以上三种方式返回值都是Class类型。
3.3 class类中的方法
通过反射实例化对象
对象.newInstance()
注:newInstance()方法内部实际上调用了无参数构造方法,必须保证无参构造存在才可以。
否则会抛出java.lang.InstantiationException异常。
3.4 Field类方法
3.5 打破封装
set()可以访问私有属性时,需要打破封装,才可以访问