第十四章:类型信息

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

1. Java是如何让我们在运行时识别对象和类的信息的。

主要有两种方式:一种是“传统的”RTTI,它假定我们在编译时已经知道了所有的类型;另一种是“反射”机制,它允许我们在运行时发现和使用类的信息。

当从数组中取出元素时,这种容器—实际上它将所有的事物都当作Object持有——会自动将结果转型回Shape。这是RTTI最基本的使用形式,因为在Java中,所有的类型转换都是在运行时进行正确性检查的。这也是RTTI名字的含义:在运行时,识别一个对象的类型。

所有的类都是在对其第一次使用时,动态加载到JVM中的。当程序创建第一个对类的静态成员的引用时,就会加载这个类。这个证明构造器也是类的静态方法,即使在构造器之前并没有使用static关键字。因此,使用new操作符创建类的新对象也会被当作对类的静态成员的引用。

2.对Class对象的引用的方法:

1.)使用Class.forName(“name”)可获得恰当的Class对象的引用。

2.)调用getClass()方法来获取Class引用。

3.)使用类字面常量:类似于:name.class,并且不会自动地初始化该Class对象。

3.为了使用类而做的准备工作实际包含三个步骤:

1.)加载,这是由类加载器执行的。该步骤将查找字节码,并从这些字节码中创建一个Class对象。

2.)链接,在链接阶段将验证类中的字节码,为静态域分配存储空间,并且如果必需的话,将解析这个类创建的对其他类的所有引用。

3.)初始化。如果该类具有超类,则对其初始化,执行静态初始化器和静态初始化块。初始化被延迟到了对静态方法(构造器隐式地是静态的)或者非常数静态域进行首次引用时才执行。

4.RTTI形式包括:

1.)传统的类型转换,如“(Shape)”,由RTTI确保类型转换的正确性,如果执行了一个错误的类型转换,就会抛出一个ClassCastException异常。

2.)代表对象的类型的Class对象。通过查询Class对象可以获取运行时所需的信息。

3.)关键字instanceof。它返回一个布尔值,告诉我们对象是不是某个特定类型的实例

原文地址:https://www.cnblogs.com/xiaobaidashu/p/12288480.html