网站大量收购独家精品文档,联系QQ:2885784924

《Java高级程序设计》课件——学习情境3 Java反射机制.pptx

《Java高级程序设计》课件——学习情境3 Java反射机制.pptx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

;一、应用场景

二、Java反射机制

三、使用反射机制的步骤

四、Java反射机制的一般用法;3;常见的应用场景如下:

逆向代码,例如反编译。

与注解相结合的框架,例如Retrofit。

单纯的反射机制应用框架,例如EventBus2.x。

动态生成类框架,例如Gson。;二、Java反射机制;?在运行时判定任意一个对象所属的类;

?在运行时构造任意一个类的对象;

?在运行时判定任意一个类所具有的成员变量和方法;

?在运行时调用任意一个对象的方法;

?生成动态代理。

;Java反射机制的优缺点

可以实现动态创建对象和编译,体现出很大的灵活性(特别是在J2EE的开发中它的灵活性就表现的十分明显)。对于Java这种先编译再运行的语言来说,反射机制可以使代码更加灵活,更加容易实现面向对象。

;优点:运行期类型的判断,动态类加载,动态代理使用反射。

缺点:性能是一个问题,反射相当于一系列解释操作,通知jvm要做的事情,性能比直接的Java代码要慢很多。

;2.2Java反射机制的相关API;ClassLoader//加载器类

Class;//类

Constructor;//构造器类

Field;//字段类

Method;//方法类

Modifier;//访问修饰符类

;1.ClassLoader类

ClassLoader是一个抽象类,它的实例是类加载器。磁盘上存在的xxx.class文件需要被加载进JVM才能执行。类加载器则是负责加载.class文件的对象,然后在JVM中生成该类的Class对象。每一个Class对象都关联着定义它的那个类加载器。

;2.Class类

Class类的对象用来描述一个运行状态的类或接口。一个xxx.java文件编译后生成一个xxx.class文件,一个xxx.class文件被JVM加载后生成该类对应的Class对象,该对象包含了该类的所有信息,比如,类中有字段、构造器、方法等信息。一个类有一个对应的Class对象。

;Class类主要方法;3.Constructor类

Constructor构造器类,封装了一个类的单个构造函数的信息和访问。

其主要方法,newInstance(Object...arg),用指定参数创建对象的实例;4.Field类

字段类,封装字段的有关信息。

主要方法:

Object?get(Objectobj),返回指定对象上由该字段表示的字段的值。

void?set(Objectobj,Objectvalue),将指定对象参数上此字段对象表示的字段设置为指定的新值。;5.Method类

方法??,封装方法的有关信息。

主要方法:

Object?invoke(Objectobj,Object...args)

调用obj对象的Method对象代表的方法,args为参数

;6.Modifier类;2.3List接口实现类的适用场合;三、使用反射机制的步骤;四、Java反射机制的一般用法;//第一种方式通过对象的getClass方法

Class?clazz1=null;

Personperson=newPerson(张,男,2010-09-10);

clazz1=person.getClass();;//第二种方式通过类的Class属性

Class?clazz2=null;

clazz2=com.daiinfo.javaadvanced.know3.example.Person.class;;//第三种方式通过Class类的静态方法forName()加载类

Class?clazz3=null;

try{

clazz3=Class.forName(com.daiinfo.javaadvanced.know3.example.Person);

}catch(ClassNotFoundExceptione){

e.printStackTrace();

}

;通过Class类的静态方法forName()来加载类,然后获得该目标类的Class对象;2.获取Person中的属性;getFields(),返回字段对象数组,该数组反映该类对象所表示的类或接口的所有可访问公共字段。

getDeclaredFields(),返回字段对象数组,该数组反映由该类对象表示的类或接口声明的所有字段。包括公共字段、受保护字段、默认(包)访问字段和私有字段。;3.获取Person中的方法;小结;;一、任务描述

二、任务分析、设计

三、编码实现

四、运行结果;31;二、任务分析、设计;其类图如图3-1所示。

;三、编码实现;1.定义Person类;2.编写测试类PersonRefl

文档评论(0)

青柠职教 + 关注
实名认证
服务提供商

从业10年,专注职业教育专业建设,实训室建设等。

1亿VIP精品文档

相关文档