lecture10反射机制.ppt

lecture10反射机制.ppt

10 java语言的反射机制 主要内容 概述 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法? 对于任意一个对象,能否调用它的任意一个方法? 概述 这种动态获取类的信息,以及动态调用对象的方法的功能来自于Java语言的反射(Reflection)机制。Java反射机制主要提供了以下功能: l???????? 在运行时判断任意一个对象所属的类; l???????? 在运行时构造任意一个类的对象; l???????? 在运行时判断任意一个类所具有的成员变量和方法; l???????? 在运行时调用任意一个对象的方法; l???????? 生成动态代理。 10.1 java reflection api简介 在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中。 l???????? Class类:代表一个类。 l???????? Field类:代表类的成员变量(成员变量也称为类的属性)。 l???????? Method类:代表类的方法。 l???????? Constructor类:代表类的构造方法。 l???????? Array类:提供了动态创建数组,以及访问数组元素的静态方法。 10.1 java reflection api简介 如例程10-1所示DumpMethods类演示了Reflection API的基本作用,它读取命令行参数指定的类名,然后打印这个类所具有的方法信息: import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) throws Exception{ // 加载并初始化命令行参数指定的类 Class classType = Class.forName(args[0]); //获得类的所有方法 Method methods[] = classType.getDeclaredMethods(); for(int i = 0; i methods.length; i++) System.out.println(methods[i].toString()); }} 10.1 java reflection api简介 运行命令“java DumpMethods java.util.Stack”,就会显示java.util.Stack类所具有的方法,程序的打印结果如下: public synchronized java.lang.Object java.util.Stack.pop() public java.lang.Object java.util.Stack.push(java.lang.Object) public boolean java.util.Stack.empty() public synchronized java.lang.Object java.util.Stack.peek() public synchronized int java.util.Stack.search(java.lang.Object) 10.1 java reflection api简介 例程10-2所示ReflectTester类,进一步演示了Reflection API的基本使用方法。ReflectTester类有一个copy(Object object)方法,这个方法能够创建一个和参数object同样类型的对象,然后把object对象中的所有属性复制到新建的对象中,并将它返回。 这个例子只能复制简单的JavaBean,假定JavaBean的每个属性都有public类型的getXXX()和setXXX()方法。 10.1 java reflection api简介 import java.lang.reflect.*; public class ReflectTester { ? public Object copy(Object object) throws Exception{ ??? //获得对象的类型 ??? Class classType=object.getClass(); ??? System.out.println(Class:+classType.getName()); ? ??//通过默认构造方法创建一个新的对象 ??? Object objectCopy= classType.getConstructor(new Class[]{}) .ne

文档评论(0)

1亿VIP精品文档

相关文档