第12章自检更灵活java中反射_第1页
第12章自检更灵活java中反射_第2页
第12章自检更灵活java中反射_第3页
第12章自检更灵活java中反射_第4页
第12章自检更灵活java中反射_第5页
已阅读5页,还剩12页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件开发魔典从入门到项目实践项目实践清华大学出版社(超值版)本课时学习重点学习指引反射指程序可以访问、检测和修改它本身状态或行为的一种能力。反射使程序的代码能够得到装载到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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论