反射:运行期类信息[Java编程]
本文“反射:运行期类信息[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
假如不知道一个对象的精确范例,RTTI会帮忙我们调查.但却有一个限制:范例必须是在编译期间已知的,不然就不能用RTTI调查它,进而无法展开下一步的工作.换言之,编译器必须明确知道RTTI要处理的全部类.
从表面看,这仿佛并非一个很大的限制,但假如得到的是一个不在自己程序空间内的对象的句柄,这时又会怎样呢?事实上,对象的类即便在编译期间也不可由我们的程序利用.比方,假定我们从磁盘大概网络得到一系列字节,并且被奉告那些字节代表一个类.由于编译器在编译代码时并不知道那个类的情形,所以怎样才能顺利地利用这个类呢?
在传统的程序计划环境中,呈现这种情形的概率大概很小.但当我们转移到一个规模更大的编程世界中,却必须对这个问题加以高度器重.第一个要注意的是基于组件的程序计划.在这种环境下,我们用“快速利用开辟”(RAD)模子来构建程序项目.RAD普通是在利用程序构建工具中内建的.这是编制程序的一种可视途径(在屏幕上以窗体的情势呈现).可将代表差别组件的图标拖曳到窗体中.随后,通过设定这些组件的属性大概值,举行精确的配置.计划期间的配置要求任何组件都是可以“例示”的(便可以安闲得到它们的实例).这些组件也要揭暴露自己的一部份内容,答应程序员读取和设置各种值.此外,用于掌握GUI事件的组件必须揭暴露与呼应的办法有关的信息,以便RAD环境帮忙程序员用自己的代码覆盖这些由事件驱动的办法.“反射”供应了一种特别的机制,可以侦测可用的办法,并产生办法名.通过Java Beans(第13章将具体介绍),Java 1.1为这种基于组件的程序计划供应了一个底子构造.
在运行期查询类信息的另一个原动力是通过网络成立与履行位于远程系统上的对象.这就叫作“远程办法调用”(RMI),它答应Java程序(版本1.1以上)利用由多台机械公布或分布的对象.这种对象的分布大概是由多方面的缘由惹起的:大概要做一件计算密集型的工作,想对它举行分割,让处于闲暇状况的其他机械分担部份工作,从而加快处理进度.某些情形下,大概需求将用于掌握特定范例任务(比方多层客户/服务器架构中的“运作法则”)的代码安排在一台特别的机械上,使这台机械成为对那些行动举行描写的一个通用储藏所.并且可以便利地改正这个场所,使其对系统内的全部方面产生影响(这是一种分外有效的计划思绪,因为机械是独立存在的,所以能简单改正软件!).分布式计算也能更充分地施展某些专用硬件的作用,它们分外擅长履行一些特定的任务——比方矩阵逆转——但对通例编程来说却显得太浮夸大概太高贵了.
在Java 1.1中,Class类(本章前面已有具体阐述)得到了扩大,可以支持“反射”的概念.针对Field,Method以及Constructor类(每个都实现了Memberinterface——成员接口),它们都新增了一个库:java.lang.reflect.这些范例的对象都是JVM在运行期成立的,用于代表未知类里对应的成员.这样便可用构建器成立新对象,用get()和set()办法读取和改正与Field对象关联的字段,以及用invoke()办法调用与Method对象关联的办法.此外,我们可调用办法getFields(),getMethods(),getConstructors(),辨别返回用于表示字段、办法以及构建器的对象数组(在联机文档中,还可找到与Class类有关的更多的资料).因此,匿名对象的类信息可在运行期被完好的揭穿出来,而在编译期间不需求知道任何东西.
大家要熟习的很重要的一点是“反射”并没有什么奇异的地方.通过“反射”同一个未知范例的对象打交道时,JVM只是简单地查抄那个对象,并调查它从属于哪个特定的类(就象从前的RTTI那样).但在这之后,在我们做其他任何事情之前,Class对象必须载入.因此,用于那种特定范例的.class文件必须能由JVM调用(要末在本地机械内,要末可以通过网络获得).所以RTTI和“反射”之间唯一的辨别就是对RTTI来说,编译器会在编译期翻开和查抄.class文件.换句话说,我们可以用“普通”方法调用一个对象的全部办法;但对“反射”来说,.class文件在编译期间是不可以利用的,而是由运行期环境翻开和查抄.
以上是“反射:运行期类信息[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:一个java类办法提取器
- ·下一篇文章:java的rtti机制语法
- ·中查找“反射:运行期类信息”更多相关内容
- ·中查找“反射:运行期类信息”更多相关内容