JAVA:RTTI

运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息。

多态(polymorphism)是基于RTTI实现的。RTTI的功能主要是由Class类实现的。

Class类

Class类是"类的类"(class of classes)。如果说类是对象的抽象和集合的话,那么Class类就是对类的抽象和集合

每一个Class类的对象代表一个其他的类。
当我们调用对象的getClass()方法时,就得到对应Class对象的引用。
String s="test "; Class c=s.getClass();

Java中每个对象都有相应的Class类对象,因此,我们随时能通过Class对象知道某个对象“真正”所属的类。无论我们对引用进行怎样的类型转换,对象本身所对应的Class对象都是同一个。当我们通过某个引用调用方法时,Java总能找到正确的Class类中所定义的方法,并执行该Class类中的代码。由于Class对象的存在,Java不会因为类型的向上转换而迷失。这就是多态的原理。

除了getClass()外还有其他返回Class对象的方法:

1
2
3
Class c1 = Class.forName("String");
Class c2 = String.class;
Class c3 =Class.forName(String.class.toString().replaceAll("class ",""));

Class 类的方法

getName() 返回类的名字
getPackage() 返回类所在的包

可以利用Class对象的newInstance()方法来创建相应类的对象,比如:

Human newPerson = c1.newInstance();

newInstance()调用默认的不含参数的构建方法。

我们可以获得类定义的成员:

getFields() 返回所有的public数据成员
getMethods() 返回所有的public方法

Class类的加载

当Java创建某个类的对象,比如Human类对象时,Java会检查内存中是否有相应的Class对象。

如果内存中没有相应的Class对象,那么Java会在.class文件中寻找Human类的定义,并加载Human类的Class对象。

在Class对象加载成功后,其他Human对象的创建和相关操作都将参照该Class对象。

@refer Vamei