已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
反射机制,课程目标,什么是反射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运算符的途径。ClassgetInterfaces()该方法返回Class对象的数组,这些对象代表的是某个Class对象所包含的接口。ClassgetSuperclass()该方法获取该Class对象的直接基类。这个方法自然也是返回一个Class引用,所以可以进一步查询其基类。这意味着在运行时,可以找到某个对象的完整类层次结构。,获得类的构造方法,获得类的构造方法可以调用Class类对象的以下方法:ConstructorgetConstructor(Classparams)获得使用特殊的参数类型的公共构造函数。ConstructorgetConstructors()获得类的所有公共构造函数。ConstructorgetDeclaredConstructor(Classparams)获得使用特定参数类型的构造函数(与接入级别无关)。ConstructorgetDeclaredConstructors()获得类的所有构造函数(与接入级别无关),案例:ConstrucotrsApp.java,获得类的成员变量,获得类的构造方法可以调用Class类对象的以下方法:FieldgetField(Stringname)获得命名的公共字段FieldgetFields()获得类的所有公共字段FieldgetDeclaredField(Stringname)获得类声明的命名的字段FieldgetDeclaredFields()获得类声明的所有字段,案例:FieldApp.java,获得类的成员方法,用于获得方法信息的函数:MethodgetMethod(Stringname,Classparams)使用特定的参数类型,获得命名的公共方法MethodgetMethods()获得类的所有公共方法MethodgetDeclaredMethod(Stringname,Classparams)使用特写的参数类型,获得类声明的命名的方法MethodgetDeclaredMethods()获得类声明的所有方法,案例:MethodApp.java,动态使用反射机制,左边的代码不仅冗长,而且可维护性差,比如以后软件升级版本中去除了一个Driver3类或者是增加了一个Driver101类,都需要修改以上的newInstance()方法。,运行时创建对象,通过反射机制动态创建对象实例方法不带参数构造方法Classc=Class.forName(ClassName);Objectobj=null;obj=c.newInstance();/不带参数带参数构造方法Classc=Class.forName(java.awt.Frame);Objectobj=null;ClasspTypes=c.getClasses();Constructorctor=c.getConstructor(pTypes);/指定parameterlist,便可获得特定之ctorObjectarg=c.getEnumConstants();/自变量obj=ctor.newInstance(arg);System.out.println(obj);,动态调用指定方法,使用反射来动态的调用类的方法,需要使用java.lang.reflect.Method中的:Objectinvoke(Objectobj,Objectargs)方法Obj:指需要调用的那个方法的隐式参数,也即那个方法所属的对象,如果调用的是一个静态方法将第一个参数指定为null。args:指需要调用的那个方法的显式参数,因为一个方法可以有很多个参数所以在这里我们必须要用一个数组来存放这些参数,注意这个方法使用的是对象数组,在存放时尽管有值类型我们也要把相应的包装器类存放进去。,案例:TestMethod.java,动态改变成员变量,调用Class的getField()并指定field名称,获得特定的Field对象之后便可直接调用Field的get()和set()方法来改变成员变量了。,反射的应用,java语言反射提供一种动态链接程序组件的多功能方法。它允许程序创建和控制任何类的对象,无需提前硬编码目标类。这些特性使得反射特别适用于创建以非常普通的方式与对象协作的库。例如,反射经常在持续存储对象为数据库、XML(我们会在以后的课程章节中学习到)或其它外部格式的框架中使用,如:流行Structs框架、Hibernate、Spring中都用到了反射技术。Javareflection非常有用,它使类和数据结构能按名
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康中国行动-慢性呼吸系统疾病防治行动实施方案(2024-2030年)
- 绿色食品花生及制品
- 小学男生阅读类书籍借阅偏好调查-基于2023年图书馆借阅系统数据
- AI赋能家具维修保养:技术应用与实操指南
- 第四单元静物画构图和色彩向画家学构图
- 矢量化风格迁移算法
- 会计人员工作总结集锦15篇
- 2025-2030智慧农业监控系统应用研究与发展农业产业化的策略
- 2025-2030智慧农业物联网技术应用于高效种植分析
- 2025-2030智慧农业机械装备行业技术进步研究及市场应用推广与产业发展方向
- 绿化保洁安全培训课件
- 知道智慧树系统思维与系统决策满分测试答案
- 工会宣传教育工作课件
- 海康门禁系统产品技术方案
- 2025年新疆高端会计人才笔试题及答案
- 营养学电子课件
- 设备升级改造管理制度
- 台球俱乐部规章管理制度
- 2025年4月自考06091薪酬管理试题及答案
- 2025年浙江宁波城建投资集团有限公司招聘笔试参考题库含答案解析
- 高中生艾滋病预防教育课件
评论
0/150
提交评论