版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件开发魔典从入门到项目实践项目实践清华大学出版社(超值版)本课时学习重点学习指引反射指程序可以访问、检测和修改它本身状态或行为的一种能力。反射使程序的代码能够得到装载到Java虚拟机中的类的内部信息。本章将详细介绍Java
的反射机制,主要内容包括java.lang.reflect
包提供的Class
类、Constructor
类、Method
类、Field
类和Array
类等,以及ParameterizedType
接口如何获取泛型类、泛型方法的信息。重点导读了解反射概述。掌握Class类如何获取对象。熟悉Class类的常用方法的使用。熟悉如何利用反射生成对象。掌握封装反射方法的Method
类。掌握封装反射属性的Field
类。掌握利用反射动态创建数组的Array
类。聚慕课教育研发中心
学习、授课与教学PPT课件12.1
反射概述在程序运行过程中,对于任意一个对象,都能够知道这个对象所在类的所有属性和方法,都能够调用它的任意一个方法和访问它的任意一个属性,这种动态调用对象的方法及动态获取信息的功能称为Java
语言的反射机制。通过Java
的反射机制,程序员可以方便、灵活地创建代码,这些代码可以在运行时进行装配,在程序运行过程中可以动态地扩展程序。Java
的反射机制主要有以下功能:在运行时判断任意一个对象所属的类。在运行时构造任意一个类的对象。在运行时判断任意一个类所具有的成员变量和方法。在运行时调用任意一个对象的方法。生成动态代理。聚慕课教育研究中心学习、授课与教学PPT课件12.2
反射类Java
提供的反射所需要的类主要有java.lang.Class
类和java.lang.reflect包中的Field
类、Constructor
类、Method
类和Array
类等。Class
类的实例表示正在运行的Java
应用程序中的类和接口。它是
Java
反射的基础,对于任何一个类,首先要产生一个Class
的对象,然后才可以通过Class类获得其他的信息。Field
类提供有关类或接口的单个字段的信息以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。该类封装了反射类的属性。Constructor
类提供关于类的单个构造方法的信息以及对它的访问权限。该类封装了反射类的构造方法。Method
类提供关于类或接口上单独某个方法的信息,该方法可能是类方法或实例方法(包括抽象方法)。该类是用来封装反射类的方法。Array
类提供了动态创建和访问Java
数组的方法。它提供的方法都是静态方法。聚慕课教育研究中心学习、授课与教学PPT课件12.3.1
认识Class
类Class类在包java.lang
中。Class类的定义格式如下:public
final
class
Class<T>extends
Objectimplements
Serializable,
GenericDeclaration,Type,AnnotatedElement聚慕课教育研究中心学习、授课与教学PPT课件12.3.2
获取Class
类对象在Java
语言中,获取Class
类对象的方式有3
种,具体如下。(
1)通过Object
类提供的getClass()方法获得Class
类对象。这是获取Class类对象最常见的一种方式,具体格式如下:Object
obj=new
Object();//创建Object
类对象Classc1=obj.getClass();//调用Object
类的getClass()方法获取Class类对象聚慕课教育研究中心学习、授课与教学PPT课件12.3.3
Class
类常用方法Class
类提供了大量的方法,用来获取所标识的实体的信息。这些实体可以是类、接口、数组、枚举、注解、基本类型或void类型等。【例12-1】(实例文件:ch12\Chap12.1.txt)
Class
类的常用方法。聚慕课教育研究中心学习、授课与教学PPT课件12.4.1
无参构造方法在Java
程序中,通常使用new
关键字调用类的构造方法来创建对象。但是,对于一些特殊情况,例如程序只有在运行时才知道要创建对象的类名,就需要使用Java
的反射机制来创建对象。使用Java
的反射机制创建对象有两种方法,即无参构造方法和有参构造方法。若使用无参数的构造方法创建对象,首先要获得这个类的Class类对象,然后调用Class类对象的newInstance()方法。具体代码如下:Class
c2=Class.forName("java.lang.Integer");//获得Class类对象
c2.newInstance();//使用Class
类对象的newInstance()方法生成对象
注意:如果该类或其null
构造方法是不可访问的,则抛出
IllegalAccessException类型的异常;如果此Class类表示一个抽象类、接口、数组类、基本类型或void
类型的实体,或者该类没有null
构造方法,或者由于其他某种原因导致实例化失败,则抛出
InstantiationException
类型的异常。聚慕课教育研究中心学习、授课与教学PPT课件12.4.2
有参构造方法若使用带参数的构造方法创建对象的具体步骤如下:(
1)获得指定类的Class
类对象。(
2)通过反射获取符合指定参数类型的构造方法类(
Constructor
类)对象。(
3)调用Constructor
类对象的newInstance()方法传入对应参数值,创建对象。【例12-2】(实例文件:ch12\Chap12.2.txt)使用有参构造方法创建对象。聚慕课教育研究中心学习、授课与教学PPT课件12.5
Constructor
类Constructor
类在包java.lang.reflect
中。Constructor
类的定义格式如下:public
final
class
Constructor<T>extendsAccessibleObjectimplements
GenericDeclaration,
MemberConstructor
类的对象可以表示类的构造方法。聚慕课教育研究中心学习、授课与教学PPT课件12.6
Method
类java.lang.reflect
包中的Method
类的实例就是使用Java
的反射机制获得 的指定类中指定方法的对象代表,Method
类中的invoke()方法可以动态 调用这个方法。invoke()方法的语法格式如下:public
Object
invoke(Object
obj,Object...
args)throws
IllegalAccessException,
IllegalArgumentException,nvocationTargetException【例12-3】(实例文件:ch12\Chap12.3.txt)利用反射类获取其他类 的域和方法,并实现对象的复制。聚慕课教育研究中心学习、授课与教学PPT课件12.7
Field
类java.lang.reflect
包中Field
类的实例是使用反射获得的类的成员变量的对 象代表。可以使用Field
类的get
方法获取指定对象上的值,也可调用它 的set
方法动态修改指定对象上的值。Field
类在包java.lang.reflect中。Field
类的定义格式如下:public
final
class
Field
extends
AccessibleObject
implements
MemberField
类的对象可以表示类或者接口中的一个域,可以是静态域,也可以是实例域。【例12-4】(实例文件:ch12\Chap12.4.txt)通过反射来动态设置和获取指定对象的指定成员变量的值。聚慕课教育研究中心学习、授课与教学PPT课件12.8
数组类java.lang.reflect
包中Array
类提供了使用反射动态创建和访问Java
数组的方法。数组作为一个对象,可以通过反射来查看其各个属性信息以及类型名。【例12-5】(实例文件:ch12\Chap12.5.txt)利用反射动态创建数组,并获取属性信息。聚慕课教育研究中心学习、授课与教学PPT课件12.9
获取泛型信息java.lang.reflect
包中提供的ParameterizedType
接口可以用来获取泛型类、泛型方法、泛型接口等的泛型参数信息。ParameterizedType
接口提供的getActualTypeArguments()方法是返回表示此类型实际类型参数的Type
对象的数组。【例12-6】(实例文件:ch12\Chap12.6.txt)使用反射获取泛型信息。聚慕课教育研究中心学习、授课与教学PPT课件12.10.1
面试解析与技巧(一)面试官:如何使用反射获取类的私有方法的信息?应聘者:获取类的私有方法,首先获取指定类的Class
类对象c;然后利用对象c
调用Class类提供的getMethod()方法,获取指定的私有方法Method
类的实例m;最后通过m
调用Method
类的setAccessible(true)取消对方法的访问检查,对象m
再调用invoke()方法真正执行这个私有方法。聚慕课教育研究中心
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024临床执业医师医学综合笔试考前冲刺卷(附答案解析)
- 执业药师(中药)药事管理与法规综合练习题库
- 2027年租房装修时间合同二篇
- 2027年沧州饲养合同猪二篇
- (新)配电柜合同-模板(范本)
- 医院项目建设的可行性研究报告
- 线上贷款中介业务合作协议
- 线上室内设计效果图制作服务协议2026
- 江苏省自考02213精密加工与特种加工高频考点
- 美债利率在定价什么
- 2026秋|新教材外研版(三起)|五年级上册英语全册教案
- 《青铜蕴巧思》教学课件 - 2026-2027 学年人教版(新教材)小学美术四年级上册
- 2026年泸西县中枢镇中心学校农
- 2025年长春市公务员录用考试《申论》真题及参考答案(甲类)
- 2026年部编版新教材道德与法治六年级上册全册教案设计(共4个单元含有教学计划)
- 2026年秋季学期德育主题活动安排表
- 2026年高考全国1卷语文高考试题(原卷版)
- 2026上海青浦区练塘镇招聘40人考前冲刺密卷AB卷附答案详解
- 2026年版高中英语(外研社版)单词大全
- 2026年水生生物病害防治员专项题库(附答案与解释)
- 2026年全国中医助理医师资格真题试卷及答案
评论
0/150
提交评论