- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 《C语言程序设计》课件——4.5实例讲解.pptx
- 《C语言程序设计》课件——7.3函数的返回值.pptx
- 《AUTOCAD》课件——项目二 平面图形基础.pptx
- 《C语言程序设计》课件——1.1C语言概述.pptx
- 《C语言程序设计》课件——1.2C程序基本结构.pptx
- 《C语言程序设计》课件——4.1算法及其表示.pptx
- 《C语言程序设计》课件——9.13用指针变量名加下标的形式访问数组.pptx
- 《C语言程序设计》课件——10.6共生体类型数据.pptx
- 《H5页面与交互动画设计》课件——H5页面的交互设计.pptx
- 《H5页面与交互动画设计》课件——H5中的动效、动画 .pptx
- 《Java高级程序设计》课件——学习情境4 泛型机制.pptx
- 《Java高级程序设计》课件——学习情境5 Java序列化机制.pptx
- 《Java高级程序设计》课件——学习情境6 Java多线程与同步机制.pptx
- 《Java高级程序设计》课件——学习情境7 Java编程.pptx
- 《LED封装应用技术》课件——二合一编带机简介.pptx
- 《LED封装应用技术》课件——发展简史.pptx
- 《LED封装应用技术》课件——固晶机各组件的保养和注意事项.pptx
- 《商务英语口语》课件——Kung Pao Chicken.pptx
- 《商务英语口语》课件——Lateral and Semi-Vowels 舌边音和半元音.pptx
- 《Python程序设计》——第一章习题.docx
文档评论(0)