反射库(reflection library) 提供了一个非常丰富且精心设计的工具集, 以便编写能够动态操纵 Java 代码的程序。这项功能被大量地应用于 JavaBeans 中,它是 Java 组件的体系结构。 - - - - - - - - - - - - - - - - - - -源于Java核心技术(卷Ⅰ)的引用
在理解反射之前需要了解类加载机制。
一、什么是反射
能够分析类能力的程序称为反射(reflective)。
二、获得class类对象的三种方式
在程序运行期间,Java 运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。 虚拟机利用运行时类型信息选择相应的方法执行。
然而,可以通过专门的 Java 类访问这些信息。保存这些信息的类被称为 Class, 这个名字很容易让人混淆。Object 类中的 getClass( ) 方法将会返回一个 Class 类型的实例。
- 类名.class(例如:Student.class)
- 对象.getClass()
Random generator = new Random():
Class cl = generator.getClass() ;
String name = cl.getName(); // name is set to "java.util.Random"
- 还可以调用静态方法 forName 获得类名对应的 Class 对象。
String className = "java.util.Random";
Class cl = Class.forName(className) ;
如果类名保存在字符串中, 并可在运行中改变, 就可以使用这个方法。当然, 这个方法只有在 dassName 是类名或接口名时才能够执行。 否则,forName 方法将抛出一个 checkedexception ( 已检查异常)。无论何时使用这个方法, 都应该提供一个异常处理器(exception handler) 。
String className = "java.util.Random";
Class cl = null;
try