Class对象

要理解RTTI在Java中的工作原理,首先必须知道类型信息在运行时是如何表示的。这项工作是由称为Class对象的特殊对象完成的,它包含了与类有关的信息。
类是程序的一部分,每个类都有一个Class对象。每当编写并且编译了一个新类,就会产生一个Class对象。为了生成这个类的对象,运行这个程序的JVM将使用被称为“类加载器”的子系统。

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

Java程序在它开始运行之前并非被完全加载,其各个部分是在必需时才加载的。

Class.forName(String str)
这个方法是Class类(所有Class对象都属于这个类)的一个static成员。Class对象和其他所有对象一样,允许我们获取并操作它的引用(这也就是类加载器的工作)。forName()是获取Class对象的引用的一种方法,返回的是对一个Class对象的引用。它有着“副作用”:如果这个类还没有被加载,加载它。

1.类字面常量

java提供了另一种方式来生成对Class对象的引用,即类字面常量。
People.class
它在编译器就会收到检查(因此不需要置于try块中)。
类字面常量不仅可以应用于普通的类,也可以应用于接口、数组以及基本数据类型。

注意,当使用“.class”来创建对Class对象的引用时,不会自动初始化该Class对象。为了使用类而做的准备包含三个步骤:
(1)加载,这是由类加载器来执行。
(2)链接。在链接阶段验证类中的字节码,为静态域分配存储空间,并且如果必需的话,将解析这个类创建的对其他类的所有引用。
(3)初始化。如果该类具有超类,则对其初始化,执行静态初始化器和静态初始化块。
初始化被延迟到了对静态方法(构造器隐式地是静态的)或者非常数静态域进行首次引用时才执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值