java反射机制

上传人:灯火****19 文档编号:121070278 上传时间:2020-02-15 格式:PDF 页数:22 大小:202.60KB
返回 下载 相关 举报
java反射机制_第1页
第1页 / 共22页
java反射机制_第2页
第2页 / 共22页
java反射机制_第3页
第3页 / 共22页
java反射机制_第4页
第4页 / 共22页
java反射机制_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《java反射机制》由会员分享,可在线阅读,更多相关《java反射机制(22页珍藏版)》请在金锄头文库上搜索。

1、 第 10 章 Java 语言的反射机制 在 Java 运行时环境中 对于任意一个类 能否知道这个类有哪些属性和方法 对于任意 一个对象 能否调用它的任意一个方法 答案是肯定的 这种动态获取类的信息 以及动态 调用对象的方法的功能来自于 Java 语言的反射 Reflection 机制 Java 反射机制主要提供 了以下功能 l 在运行时判断任意一个对象所属的类 l 在运行时构造任意一个类的对象 l 在运行时判断任意一个类所具有的成员变量和方法 l 在运行时调用任意一个对象的方法 l 生成动态代理 本章首先介绍了 Java Reflection API 的用法 然后介绍了一个远程方法调用的例子

2、 在 这个例子中客户端能够远程调用服务器端的一个对象的方法 服务器端采用了反射机制提供 的动态调用方法的功能 而客户端则采用了反射机制提供的动态代理功能 10 1 Java Reflection API 简介 在 JDK 中 主要由以下类来实现 Java 反射机制 这些类都位于 java lang reflect 包中 l Class 类 代表一个类 l Field 类 代表类的成员变量 成员变量也称为类的属性 l Method 类 代表类的方法 l Constructor 类 代表类的构造方法 l Array 类 提供了动态创建数组 以及访问数组元素的静态方法 如例程 10 1 所示 Dum

3、pMethods 类演示了 Reflection API 的基本作用 它读取命令 行参数指定的类名 然后打印这个类所具有的方法信息 例程 10 1 DumpMethods java 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

4、for int i 0 i methods length i System out println methods i toString PDF 文件使用 pdfFactory Pro 试用版本创建 240 Java Netword Programming 运行命令 java DumpMethods java util Stack 就会显示 java util Stack 类所具有的 方法 程序的打印结果如下 public synchronized java lang Object java util Stack pop public java lang Object java util St

5、ack 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 2 所示 ReflectTester 类进一步演示了 Reflection API 的基本使用方法 ReflectTester 类有一个 copy Object object 方法 这个方法能够创建一个和参数 obj

6、ect 同样类型的对象 然后把 object 对象中的所有属性复制到新建的对象中 并将它返回 这个例子只能复制简单的 JavaBean 假定 JavaBean 的每个属性都有 public 类型的 getXXX 和 setXXX 方法 例程 10 2 ReflectTester java import java lang reflect public class ReflectTester public Object copy Object object throws Exception 获得对象的类型 Class classType object getClass System out pr

7、intln Class classType getName 通过默认构造方法创建一个新的对象 Object objectCopy classType getConstructor new Class newInstance new Object 获得对象的所有属性 Field fields classType getDeclaredFields for int i 0 i fields length i Field field fields i String fieldName field getName String firstLetter fieldName substring 0 1 t

8、oUpperCase 获得和属性对应的 getXXX 方法的名字 String getMethodName get firstLetter fieldName substring 1 获得和属性对应的 setXXX 方法的名字 String setMethodName set firstLetter fieldName substring 1 获得和属性对应的 getXXX 方法 Method getMethod classType getMethod getMethodName new Class 获得和属性对应的 setXXX 方法 Method setMethod classType g

9、etMethod setMethodName new Class field getType 调用原对象的 getXXX 方法 Object value getMethod invoke object new Object System out println fieldName value 调用复制对象的 setXXX 方法 etMethod invoke objectCopy new Object value return objectCopy PDF 文件使用 pdfFactory Pro 试用版本创建 Java Network Programming 241 第 10 章 Java 语

10、言的反射机制 public static void main String args throws Exception Customer customer new Customer Tom 21 customer setId new Long 1 Customer customerCopy Customer new ReflectTester copy customer System out println Copy information customerCopy getName customerCopy getAge class Customer Customer 类是一个 JavaBea

11、n private Long id private String name private int age public Customer public Customer String name int age this name name this age age public Long getId return id public void setId Long id this id id public String getName return name public void setName String name this name name public int getAge re

12、turn age public void setAge int age this age age ReflectTester 类的 copy Object object 方法依次执行以下步骤 1 获得对象的类型 Class classType object getClass System out println Class classType getName 在 java lang Object 类中定义了 getClass 方法 因此对于任意一个 Java 对象 都可 以通过此方法获得对象的类型 Class 类是 Reflection API 中的核心类 它有以下方法 l getName 获

13、得类的完整名字 l getFields 获得类的 public 类型的属性 l getDeclaredFields 获得类的所有属性 l getMethods 获得类的 public 类型的方法 l getDeclaredMethods 获得类的所有方法 l getMethod String name Class parameterTypes 获得类的特定方法 name 参 数指定方法的名字 parameterTypes 参数指定方法的参数类型 l getConstrutors 获得类的 public 类型的构造方法 l getConstrutor Class parameterTypes 获

14、得类的特定构造方法 parameterTypes PDF 文件使用 pdfFactory Pro 试用版本创建 242 Java Netword Programming 参数指定构造方法的参数类型 l newInstance 通过类的不带参数的构造方法创建这个类的一个对象 2 通过默认构造方法创建一个新的对象 Object objectCopy classType getConstructor new Class newInstance new Object 以上代码先调用 Class 类的 getConstructor 方法获得一个 Constructor 对象 它代 表默认的构造方法 然后

15、调用 Constructor 对象的 newInstance 方法构造一个实例 3 获得对象的所有属性 Field fields classType getDeclaredFields Class 类的 getDeclaredFields 方法返回类的所有属性 包括 public protected 默 认和 private 访问级别的属性 4 获得每个属性相应的 getXXX 和 setXXX 方法 然后执行这些方法 把原 来对象的属性复制到新的对象中 for int i 0 i fields length i Field field fields i String fieldName fi

16、eld getName String firstLetter fieldName substring 0 1 toUpperCase 获得和属性对应的 getXXX 方法的名字 String getMethodName get firstLetter fieldName substring 1 获得和属性对应的 setXXX 方法的名字 String setMethodName set firstLetter fieldName substring 1 获得和属性对应的 getXXX 方法 Method getMethod classType getMethod getMethodName new Class 获得和属性对应的 setXXX 方法 Method setMethod classType getMethod setMethodName new Class field getType 调用原对象的 getXXX 方法 Object value getMethod invoke object new Object System out println fieldName val

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号