T网络程序设计应用与反射机制.ppt

上传人:sh****n 文档编号:6429799 上传时间:2020-02-25 格式:PPT 页数:16 大小:773.50KB
返回 下载 相关 举报
T网络程序设计应用与反射机制.ppt_第1页
第1页 / 共16页
T网络程序设计应用与反射机制.ppt_第2页
第2页 / 共16页
T网络程序设计应用与反射机制.ppt_第3页
第3页 / 共16页
点击查看更多>>
资源描述
反射机制 课程目标 什么是反射Class类的介绍如何用Class类获得类的构造方法 成员属性 成员方法反射的应用动态创建对象动态调用成员方法改变成员变量 反射的概念 反射主要是指程序可以访问 检测和修改它本身状态或行为的一种能力 java中反射是一种强大的工具 它使我们能够创建灵活的代码 这些代码可以在运行时装配 无需在组件之间进行源代码链接 反射允许我们在编写与执行程序时 使我们的程序代码能够接入或装载到JVM中类的内部 而不是源代码中选定的类协作的代码 这使反射成为构建灵活的应用程序的主要工具 但是要注意 使用得当 否则反射的成本会很高 反射的概念 Java语言的反射机制主要提供以下功能 在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断任意一个类所具有的成员变量和方法在运行时调用任意一个类所具有的成员变量和方法生成动态代理在java lang reflect包当中提供了实现反射机制的类 Class类 代表一个类 Field类 代表类的成员变量 也称为类的属性 Method类 代表类的方法 Constructor类 代表类的构造方法 Array类 该类提供动态地生成和访问java数组的方法 检测类 Class类概述 Class对象Object类是所有类的继承根源 Object类声明了多个应该在所有类中被改写的methods方法 如 hashCode equals clone toString getClass 等 其中getClass 返回了一个Class类对象 Class类和其它的类一样继承自Object类 Class对象包含了与类相关的信息 事实上 Class对象就是用来创建类的所有的 普通 对象的 类是程序的一部分 每个类都有一个Class对象 换言之 每当编写并且编译了一个新类时 就会产生一个Class对象 恰当地说 是被保存在一个同名的 class文件中 在运行时 当我们想生成这个类的对象时 运行这个程序的java虚拟机 JVM 首先检查这个类的Class对象是否已经加载 如果尚未加载 JVM就会根据类名查找 class文件 并将其载入 一旦某个类的Class对象被载入内存 它就被用来创建这个类的所有对象 案例 T17 TestClass java 获取Class实例的三种方式 第一种 利用对象调用getClass 方法获取该对象的Class实例 Stringstr abc Classc str getClass 第二种 使用Class类的静态方法forName 用类的名字获取一个Class实例 Class forName Gum 第三种 对于基本数据类型的封装类 可以采用 TYPE来获取相对应的基本数据类型的Class实例 ClassintClass Integer TYPE Class类的其他方法 ObjectnewInstance 使用所选的Class对象生成该类的新实例 它调用了缺省 无参数 的类构造器生成新的对象 所以使用newInstance 方法创建的类必须有一个缺省构造器 对于newInstance 来说 可以在原先没有任何对象存在的情况下 使用它创建一个新的对象 booleanisInstance 该方法提供了一种动态地调用instanceof运算符的途径 Class getInterfaces 该方法返回Class对象的数组 这些对象代表的是某个Class对象所包含的接口 ClassgetSuperclass 该方法获取该Class对象的直接基类 这个方法自然也是返回一个Class引用 所以可以进一步查询其基类 这意味着在运行时 可以找到某个对象的完整类层次结构 获得类的构造方法 获得类的构造方法可以调用Class类对象的以下方法 ConstructorgetConstructor Class params 获得使用特殊的参数类型的公共构造函数 Constructor getConstructors 获得类的所有公共构造函数 ConstructorgetDeclaredConstructor Class params 获得使用特定参数类型的构造函数 与接入级别无关 Constructor getDeclaredConstructors 获得类的所有构造函数 与接入级别无关 案例 ConstrucotrsApp java 获得类的成员变量 获得类的构造方法可以调用Class类对象的以下方法 FieldgetField Stringname 获得命名的公共字段Field getFields 获得类的所有公共字段FieldgetDeclaredField Stringname 获得类声明的命名的字段Field getDeclaredFields 获得类声明的所有字段 案例 FieldApp java 获得类的成员方法 用于获得方法信息的函数 MethodgetMethod Stringname Class params 使用特定的参数类型 获得命名的公共方法Method getMethods 获得类的所有公共方法MethodgetDeclaredMethod Stringname Class params 使用特写的参数类型 获得类声明的命名的方法Method getDeclaredMethods 获得类声明的所有方法 案例 MethodApp java 动态使用反射机制 左边的代码不仅冗长 而且可维护性差 比如以后软件升级版本中去除了一个Driver3类或者是增加了一个Driver101类 都需要修改以上的newInstance 方法 运行时创建对象 通过反射机制动态创建对象实例方法不带参数构造方法Classc Class forName ClassName Objectobj null obj c newInstance 不带参数带参数构造方法Classc Class forName java awt Frame Objectobj null Class pTypes c getClasses Constructorctor c getConstructor pTypes 指定parameterlist 便可获得特定之ctorObject arg c getEnumConstants 自变量obj ctor newInstance arg System out println obj 动态调用指定方法 使用反射来动态的调用类的方法 需要使用java lang reflect Method中的 Objectinvoke Objectobj Object args 方法Obj 指需要调用的那个方法的隐式参数 也即那个方法所属的对象 如果调用的是一个静态方法将第一个参数指定为null args 指需要调用的那个方法的显式参数 因为一个方法可以有很多个参数所以在这里我们必须要用一个数组来存放这些参数 注意这个方法使用的是对象数组 在存放时尽管有值类型我们也要把相应的包装器类存放进去 案例 TestMethod java 动态改变成员变量 调用Class的getField 并指定field名称 获得特定的Field对象之后便可直接调用Field的get 和set 方法来改变成员变量了 反射的应用 java语言反射提供一种动态链接程序组件的多功能方法 它允许程序创建和控制任何类的对象 无需提前硬编码目标类 这些特性使得反射特别适用于创建以非常普通的方式与对象协作的库 例如 反射经常在持续存储对象为数据库 XML 我们会在以后的课程章节中学习到 或其它外部格式的框架中使用 如 流行Structs框架 Hibernate Spring中都用到了反射技术 Javareflection非常有用 它使类和数据结构能按名称动态检索相关信息 并允许在运行着的程序中操作这些信息 java的这一特性是其它一些常用语言 如C C Fortran或者Pascal等都不具备的 案例 packageT17 yingyong 总结 什么是反射Class类的介绍如何用Class类获得类的构造方法 成员属性 成员方法反射的应用动态创建对象动态调用成员方法改变成员变量
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!