第14章-类型的信息RTTI

以JDK6为例

介绍

RTTI运行时类型信息使得可以在程序运行时发现和使用类型信息。

Run-Time Type Information

使用方式

Java是如何在运行时识别对象和类的信息的,主要有两种方式(还有辅助的第三种方式,见下描述)

  1. “传统的”RTTI,它假定在编译时已经知道所有的类型,比如Shape s = (Shape)s1
  2. “反射”机制,它运行在运行时发现和使用类的信息,即使用Class.forName()
  3. 关键字instanceof,它返回一个bool值,它保持类型的概念,它指的是”你是这个类吗?或者你是这个类的派生类吗?”。而如果用==equals比较实际的Class对象,就没有考虑继承它或者是这个确切的类型,或者不是。

    工作原理

    RTTI主要用来运行时获取对象到底是什么具体的类型。
    RTTI运行的时候,识别一个对象的类型。(运行的时候获取对象确切的类型)
    要理解RTTI在Java中的工作原理,首先必须知道类型信息在运行时是如何表示的,这项工作是由称为Class对象的特殊对象完成的,它包含与类有关的信息。Java Class对象来执行其RTTI,使用类加载器的子系统实现。
    类是程序的重要组成部分,每个类都有一个Class对象,每当编写并编译一个新类就会产生一个Class对象,它被保存在一个同名的.class文件中。在运行时,生成这个类的对象时,运行这个程序的Java虚拟机(JVM)会确认这个类的Class对象是否已经加载,如果尚未加载,JVM就会根据类名查找.class文件,并将其载入,一旦这个类的Class对象被载入内存,它就被用来创建这个类的所有对象。
    在运行时使用类型信息,就必须首先获得对恰当的Class对象的引用,获取方式有三种。

    第1种

    如果没有持有该类型的对象,则Class.forName()就是实现此功能的便捷途,因为它不需要对象信息。

    第2种

    如果已经拥有类型的对象,那就可以通过调用getClass()方法来获取Class引用,它将返回表示该对象的实际类型的Class引用。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×