反射概述
Jaa的反射( Reletio )机制是指在程序的运行状态中,可以构造任意个类的对象, 可以得到任意一个对象所属的类的信息,可以调用任意个类的成员变量和方法,可以获取任意个对象的属性和方法,这种动态获取程序信息和动态调用对象的功能称为Java语言的反射机制。
反射机制的优点是可以实现动态创建对象和编译(即动态编译),特别是在Java EE的开发中,反射的灵活性表现得十分明显。例如,一个大型的软件,不可能一-次就把程序设计得很完美, 当这个程序编译、发布上线后,如果需要更新某些功能,不可能让用户把以前的软件卸载,再重新安装新的版本。这时,如果采用静态编译,需要把整个程序重新编译-次才可以实现功能的更新,而采用反射机制、程序可以在运行时动态创建和编译对象,不需要用户重新安装软件即可实现功能的更新。
Class是JDK定义的类。Class类常用的方法如下显示
由于Class对象代表的是class文件(类),因此可以说所有的类实际上都是Class类的实例,所有的的都可以转变为Class类型表示。
实例化Class对象共有以下3种方式。
(1 )根据类名获取:类名.class。
(2)根据对象获取:对象.getClass ( )。
(3 )根据全限定类名获取: Class.forName ( "全限定类名" )。
反射的应用
在实际开发中,通过反射可以得到一个类的完整结构,包
括类的构造方法、类的属性、类的方法,这就需要使用到
javalangrelet包中的以下几个类。
(1) Constructor:表示类中的构造方法。
(2) Field:表示类中的属性。
(3) Method:表示类中的方法。
获取全部方法
要取得一个类中的全部方法,可以使用Chos类中的eMe (0方法该方法返回个Mern类的
获取所实现的全部接口
对象数组。如果想要进一步取得方法的具体信息, 如方法的参数抛出的异常声明等,
要取得一个类所实现的全部接口, 可以使用Class中的geInteraces ( )方法。gentrftces ( )方法声明如下:
public Class[] getInterfaces () ;
getInterfaces )方法返回一个Class类的对象数组,调用Class类中的getName( )方法可以取得类的名称。