1、运行时类型识别(Run-time Type Identification, RTTI)主要有两种方式,一种是我们在编译时和运行时已经知道了所有的类型,另外一种是功能强大的“反射”机制。要理解RTTI在Java中的工作原理,首先必须知道类型信息在运行时是如何表示的,这项工作是由“Class对象”完成的,它包含了与类有关的信息。类是程序的重要组成部分,每个类都有一个Class对象,每当编写并编译了一个新类就会产生一个Class对象,它被保存在一个同名的.class文件中。在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)会确认这个类的Class对象是否已经加载,如果尚未加
2、载,JVM就会根据类名查找.class文件,并将其载入,一旦这个类的Class对象被载入内存,它就被用来创建这个类的所有对象。一般的RTTI形式包括三种:1. 传统的类型 。如“(Apple)Fruit”,由RTTI确保类型 的 确 ,如果 行了一个 的类型 ,就会 一个ClassCastException 。2. Class对象来 对象的类型。如Class c = Class.forName(“Apple”);Object o = c.newInstance();3. 关 instanceof Class.isInstance()方 来确 对象是否 个 类型的 , 确的 , 是instanc
3、eof / Class.isInstance() 用来确 对象是否 个 类 其所有类的 ,这和equals() / =一,它们用来两个对象是否 同一个类的 ,有currency1“关。反射如果知道 个对象的类型, RTTI来 ,fi是这个类型在编译时必须已知,这fl能 用RTTI来识别。在编译时,编译必须知道所有 RTTI来理的类。用反射机制 这个 制,它主要 用 两种,一个是“ 件的编程”,在这种编程方式中,将 用 种 ” 用(RAD)的 用建工 来建项。这是 在 的 编程方 , 表同组件的 来创建程序,件的 来 它们。这种 要 件都是 的,并 要 其部分信息, 程序 和件的 。当理GUI时
4、 的件时 必须 关方 的 , RAD 程序 这 理 件的方 。在这 ,就要用反射的机制来查 用的方 并方 名。Java JavaBeansfi了 件的编程 。 种,在运行时 类的信息的另外一个 机,就是 能 fi在 的 程 创建和运行对象的能 。这被成 程用(RMI),它一个Java程序将对象分 在 机 ,这种分 能将 行一 要进行大量计算的任务,充分利用计算机资源,fi高运行度。Class支持反射,java.lang.reflect中包含了Field/Method/Constructor类,每个类都 了Member接口。这 类型的对象都是由JVM在运行时创建的,用来表示未知类 对 的成 。如 用Constructor类创建新的对象,用get()和set()方 和修改与Field对象关联的 段,用invoke()方 用与Method对象关联的方 。同时, 用getFields()、getMethods()、getConstructors()等方 来表示 段、方 造的对象数组。这,未知的对象的类信息在运行时就能被完全确 下来,而在编译时 要知道任何信息。另外,RTTI有时能解决效率问题。当程序中 用 态给程序的运行带来负担的时候, 用RTTI编写一段码来fi高效率。