欢迎来到天天文库
浏览记录
ID:11767316
大小:258.00 KB
页数:84页
时间:2018-07-13
《java编程思想第十四章类型信息之反射与代理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十四章类型信息★RTTI★反射与代理五、反射:运行时的类信息1、复习:★RTTI的三种使用形式★RTTI的三种使用形式◆传统的类型转换(发生在编译时)◆Class对象(通过查询Class对象可以获取运行时所需的信息)◆关键字instanceof(发生在运行时)五、反射:运行时的类信息2、如果不知道某个对象的类型,RTTI可以告诉你,但是有一个限制:★这个类型在编译时必须已知,这样才能使用RTTI识别它,并且利用这些信息做一些有用的事★在Java程序中,我们常常会利用这样的语句来创建一个对象:Datedate=newDate();◆注意:在该语句中,date的类型(Jav
2、a.util.Date)在编译时已经确定◆那么,有没有什么办法,使我们可以将对象类型的确定时间由编译时转到运行时,答案是肯定的,这就是利用Java的反射机制五、反射:运行时的类信息3、反射(Reflection)的概念和由来★反射的概念由Smith在1982年首次提出◆主要是指程序可以访问、检测和修改它本身状态或行为的一种能力1、反射概念的提出很快引发了计算机科学领域关于应用反射性的研究★它首先被程序设计语言所采用,并在Lisp和面向对象方面取得了成绩,其中:LEAD/LEAD++、OpenC++和OpenJava就是基于反射机制的语言◆而现在,反射机制也被应用到了视窗系
3、统、操作系统和文件系统中2、反射本身并不是一个新概念,我们很容易想起在光学中也有反射的概念★比如照镜子,通过反射,我们可以看到自己★尽管在计算机科学领域中,反射这个概念已经被赋予了很多新的含义,但是从现象上来说,它们确实有某些相通之处,而这种联想有助于我们对反射概念的理解3、在计算机科学中,反射是指通过某种机制来实现对自己行为的自描述和监测,并且能够根据这些自描述,调整或修改系统、应用或程序所描述的行为和状态★可以看出,同一般的反射概念相比,计算机科学领域的反射不单单指反射本身,还包括了对反射结果所采取的措施五、反射:运行时的类信息4、在Java中,反射的概念和作用⑴反射
4、是Java被视为动态(或者准动态)语言的一个关键性质★程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言★从这个被大多数人所公认的,关于动态语言的定义来看,Perl、Python、Ruby是动态语言◆而C++、Java、C#不是动态语言◆尽管在这样的定义与分类下,Java并不是一种动态语言,但它却有着一个非常突出的与动态相关的机制:反射五、反射:运行时的类信息⑵概念:Java中的反射机制是指★运行中的Java程序可以对自身进行描述和检查,并且能够根据这些检查结果对程序进行进一步的深入处理五、反射:运行时的类信息⑶作用:利用Java的反射机制,Java程序可在执行
5、期载入,探知和使用编译期间完全未知的classes★对于这些classes,我们不单单可以利用它们来生成各种对象,还可获取其Field,对Field设值,以及调用方法等等五、反射:运行时的类信息5、反射的典例★仔细分析下面的典例,让我们看看反射是如何工作的★importjava.lang.reflect.*;publicclassDumpMethods{publicstaticvoidmain(Stringargs[]){try{Classc=Class.forName(args[0]);//保证编译期间不知道类的详细信息Methodm[]=c.getDeclaredMe
6、thods();for(inti=0;i7、)方法来获取该指定类的方法列表◆这样就列出了java.util.Stack类的各个方法名以及它们的限制符和返回类型五、反射:运行时的类信息6、Java.lang.reflect包简介★共包含有2个接口和8个类◆更详尽资料(包括以上接口和类所包含的属性和方法)请参阅官方文档★Java.lang.reflect包的接口⑴InvocationHandler接口:⑵Member接口:◆该接口可以获取有关类成员(包括域或者方法)或者构造函数的信息★Java.lang.reflect包的类⑴AccessibleObject类:◆该类是域(
7、)方法来获取该指定类的方法列表◆这样就列出了java.util.Stack类的各个方法名以及它们的限制符和返回类型五、反射:运行时的类信息6、Java.lang.reflect包简介★共包含有2个接口和8个类◆更详尽资料(包括以上接口和类所包含的属性和方法)请参阅官方文档★Java.lang.reflect包的接口⑴InvocationHandler接口:⑵Member接口:◆该接口可以获取有关类成员(包括域或者方法)或者构造函数的信息★Java.lang.reflect包的类⑴AccessibleObject类:◆该类是域(
此文档下载收益归作者所有