深入理解Class对象

RRIT及Class对象的概念

        RRIT(Run-Time Type Identification)运行时类型识别。其作用是在运行时识别一个对象的类型和类的信息。主要有两种方式:一种是“传统的”RTTI,它假定我们在编译时已经知道了所有的类型;另一种是“反射”机制,它允许我们在运行时发现和使用类的信息。

理解Class对象

        类是程序的一部分,每个类都有一个Class对象,换言之,每当编写并且编译了一个新类,就会产生一个Class对象(更恰当的说,是保存在一个同名的.class文件中)。所有的类都是在对其第一次使用时动态的加载到JVM中的。例如我们写一个Test类,编译后生成了Test.class,此时我们的Test类的Class对象就保存在class文件中,当我们new一个新对象或者引用静态成员变量时,java虚拟机(JVM)中的类加载器子系统会将对应的Class对象加载到JVM中,然后JVM再根据这个类型信息相关的Class对象创建我们的需要的实例对象或者提供静态变量的引用值。

        需要特别注意的是:手动编写的每一个class类,无论创建多少个实例对象,在JVM中都只有一个Class对象,即在内存中每个类有且只有一个相对应的Class对象   

Test t1 = new Test();
Test t2 = new Test();
Test t3 = new Test();

    如上所示,实际上JVM内存中只存有一个Test的Class对象。

 Class类:Class类也是一个实实在在的类,存在于JDk的java.lang包中,Class类的实例表示java应用运行时的类(class ans enum)或接口(interface and annotation)每个java类运行时都在JVM里表现为一个Class对象,可通过类名.class、类型.getClass()、Class.forName("类名")等方法获取Class对象。数组同样也被映射为为class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本类型boolean,byte,char,short,int,long,float,double和关键字void同样表现为 class 对象。

到这我们也就可以得出以下几点信息

  • Class类也是类的一种,与class的关键字是不一样的
  • 手动编写的类被编译后会产生一个Class对象,其表示的是创建类的类型信息,而且这个Class对象保存在同名的.class文件中(字节码文件)
  • 每个有关键字class标识的类,在内存中有且只有一个与之对应的Class对象来描述其类型信息,无论创建多个个实例对象,其依据是用的一个Class对象
  • Class类只存私有构造函数,因此对应的Class对象只能有JVM创建和加载
  • Class类的对象的作用是运行时提供或获得某个对象的类型信息,这点对反射很重要

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值