`
dickyzhu
  • 浏览: 107433 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

类型识别与反射

 
阅读更多

运行时类型识别(Run-time Type Identification, RTTI)主要有两种方式,一种是我们在编译时和运行时已经知道了所有的类型,另外一种是功能强大的“反射”机制。
要理解RTTI在Java中的工作原理,首先必须知道类型信息在运行时是如何表示的,这项工作是由“Class对象”完成的,它包含了与类有关的信息。类是程序的重要组成部分,每个类都有一个Class对象,每当编写并编译了一个新类就会产生一个Class对象,它被保存在一个同名的.class文件中(注:在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时的类型标识。这个信息保存着每个对象所属的类足迹,保存这些信息的类被称为Class。)。在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)会确认这个类的Class对象是否已经加载,如果尚未加载,JVM就会根据类名查找.class文件,并将其载入,一旦这个类的Class对象被载入内存,它就被用来创建这个类的所有对象。一般的RTTI形式包括三种:
1. 传统的类型转换。如“(Apple)Fruit”,由RTTI确保类型转换的正确性,如果执行了一个错误的类型转换,就会抛出一个ClassCastException异常。
2.  通过Class对象来获取对象的类型。如
Class c = Class.forName(“Apple”);
Object o = c.newInstance();
3.  通过关键字instanceof或Class.isInstance()方法来确定对象是否属于某个特定类型的实例,准确的说,应该是instanceof / Class.isInstance()可以用来确定对象是否属于某个特定类及其所有基类的实例,这和equals() / ==不一样,它们用来比较两个对象是否属于同一个类的实例,没有考虑继承关系。
反射
       如果不知道某个对象的类型,可以通过RTTI来获取,但前提是这个类型在编译时必须已知,这样才能使用RTTI来识别。即在编译时,编译器必须知道所有通过RTTI来处理的类。
使用反射机制可以不受这个限制,它主要应用于两种情况,第一个是“基于构件的编程”,在这种编程方式中,将使用某种基于快速应用开发(RAD)的应用构建工具来构建项目。这是现在最常见的可视化编程方法,通过代表不同组件的图标拖动到图板上来创建程序,然后设置构件的属性值来配置它们。这种配置要求构件都是可实例化的,并且要暴露其部分信息,使得程序员可以读取和设置构件的值。当处理GUI时间的构件时还必须暴露相关方法的细细,以便RAD环境帮助程序员覆盖这些处理事件的方法。在这里,就要用到反射的机制来检查可用的方法并返回方法名。Java通过JavaBeans提供了基于构件的编程架构。
       第二种情况,在运行时获取类的信息的另外一个动机,就是希望能够提供在跨网络的远程平台上创建和运行对象的能力。这被成为远程调用(RMI),它允许一个Java程序将对象分步在多台机器上,这种分步能力将帮助开发人员执行一些需要进行大量计算的任务,充分利用计算机资源,提高运行速度。
       Class支持反射,java.lang.reflect中包含了Field/Method/Constructor类,每个类都实现了Member接口。这些类型的对象都是由JVM在运行时创建的,用来表示未知类里对应的成员。如可以用Constructor类创建新的对象,用get()和set()方法读取和修改与Field对象关联的字段,用invoke()方法调用与Method对象关联的方法。同时,还可以调用getFields()、getMethods()、getConstructors()等方法来返回表示字段、方法以及构造器的对象数组。这样,未知的对象的类信息在运行时就能被完全确定下来,而在编译时不需要知道任何信息。
       另外,RTTI有时能解决效率问题。当程序中使用多态给程序的运行带来负担的时候,可以使用RTTI编写一段代码来提高效率。
分享到:
评论

相关推荐

    语音识别的MATLAB实现

    由于通过这种方式进行录音的文件格式是.wav,所以要先设置录音长度,以及对头文件进行一些设置:包括buffer的地址为InputBuffer的初始地址,大小为录音长度的两倍,类型。使用waveInPrepareHeader为录音设备准备...

    乌尔逊凹陷地震反射终止类型及其纵向叠置特征与不整合界面的识别 (2011年)

    通过对乌尔逊凹陷各反射界面终止类型的识别,分析地震反射终止类型的纵向叠置特征,结合各时期构造运动和沉积建造背景,解析乌尔逊凹陷各不整合界面的地质意义,并通过剖面演化史分析进行验证.结果表明:区域性构造...

    深入理解Java类型信息(Class对象)与反射机制

    本篇主要是深入对Java中的Class对象进行分析,这对后续深入理解反射技术非常重要,主要内容如下:认识Class对象之前,先来了解一个概念,RTTI(Run-TimeTypeIdentification)运行时类型识别,对于这个词一直是C++中...

    薄互层反射系数序列时、频特征研究

    薄互层反射系数序列时、频特征研究,贺锡雷,黄德济,该文针对薄互层储层结构难以识别的问题进行了研究。通过建立不同类型薄互层地质结构的反射系数时间序列与其振幅谱的数学表达式,

    使用雷达回波三维信息自动识别降水类型的方法 (2012年)

    提出了一种使用雷达回波三维信息(反射率因子的水平梯度、垂直递减率、垂直廓线变化特征以及回波顶高等)自动识别降水类型的方法,该方法可将雷达回波划分为热带降水类型、大陆强对流云降水类型和层状云降水类型。...

    深入理解Java反射

    Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;另一种是反射机制,它允许我们在运行时发现和使用类的信息。  1、Class对象  理解RTTI...

    C++ 反射机制详解及实例代码

    然而C++是不支持反射机制,虽然C++有RTTI(运行时类型识别)。但是想要实现C++对象序列化,序列化就是存储到磁盘上,将对象变成一定格式的二进制编码,然后要用的时候再将保存在磁盘上的二进制编码转化成一个内存中的...

    举例讲解Java的RTTI运行时类型识别机制

    主要介绍了Java的RTTI运行时类型识别机制,包括泛化的Class引用以及类型检查instanceof等知识点,需要的朋友可以参考下

    河流-湖泊沉积体系准层序识别原理及应用 (2014年)

    针对河流相准层序难以识别的问题,将河流相沉积与湖泊(三角洲)相沉积联系起来,通过河流-湖泊沉积体系沉积基准面的升、降变化及沉积物供给速率的综合分析,探讨了河湖相准层序的形成和类型,指出:存在多种类型的河湖相准...

    C均值聚类-SVM神经网络的海底沉积物分类识别程序(含matlab源代码)

    利用反射地震波或浅地层剖面反射波数据,基于C均值聚类-SVM神经网络的海底沉积物分类识别程序,实现沉积物类型的模糊聚类分析。供从事海底沉积物声学分类研究的同行使用。

    回音壁模式光学微腔识别细胞类型

    回音壁模式是光子在一个准二维平面内运动,并不断地在微腔边界...与在纯水环境中的激光输出相比,细胞内荧光微球回音壁模式的谐振峰发生了红移,且红移量与细胞类型有关,说明可以用回音壁模式实现细胞种类的无标记识别。

    基于脉冲红外热像法的表面下识别的有限元模拟

    利用ANSYS有限元分析软件对不锈钢平底孔两种深度4种缺陷试件进行建模,施加单面热流,模拟了脉冲红外...考察了有限元分析方法用于表面下缺陷类型识别的可行性,为进一步进行脉冲红外热成像用于表面下识别检测提供借鉴。

    关于Dunkl角矩量代数

    它们与反射算符一起在与有限实反射组关联的有理Cherednik代数中生成一个子代数。 我们发现了代数的所有定义关系,这些关系似乎是二次的,并且证明了代数是庞加莱-伯克霍夫-威特(PBW)类型的。 我们证明该代数包含...

    松辽盆地长岭断陷火山岩储层识别与预测 (2010年)

    文章在钻井揭示的火山岩岩石学特征分析的基础上,对长岭断陷查干花地区火山岩地震反射特征进行了分析,总结了3种不同类型火山岩组合的地震识别标志。在此基础上,主要应用趋势面分析、相干体分析、属性提取等多种...

    RFID技术中的SAW射频识别无源电子标签技术及应用

    射频识别系统 射频识别(RFID)技术是一种无接触自动识别技术,其基本原理是利用射频信号及其空间耦合、传输特性,实现对静止的或移动中的待识别物品的自动机器识别。  射频识别系统一般由两个部分组成,即电子标签...

    在巴西IAG / USP地球物理测试场中埋没的混凝土管和钢/塑料罐的GPR层析成像

    装满水的塑料罐底部也有强烈的反射,这很好地说明了在罐内有某些类型的流体的情况下,解释了地下土壤中目标的GPR数据。 储罐顶部的极性差异结果可以用作引导图案,以识别埋没的储罐或已注满水。 将微波层析成像技术...

    RFID技术中的RFID系统按照耦合类型进行分类

    (1)电感耦合系统 ... 在电磁反向散射耦合系统中9读写器和电子标签之间的射频信号的实现为雷达原理模型,发射出去的电磁波,碰到目标后被反射,同时携带回目标信息。该系统依据的是电磁波的空间传输规律,如图

    巷道顶板锚固体应力波传播特性数值试验与应用

    数值计算结果表明锚固体不同失稳模式下的波导特征存在差异性,即:锚固体中波速与围岩岩性具有很好的相关性,依据波速可识别围岩岩性;层状锚固体围岩分界面处应力波发生反射,根据反射特征和反射时间可确定岩层属性和...

Global site tag (gtag.js) - Google Analytics