java中最特殊的对象——Class对象

什么是Class对象?

Class对象描述类的信息,对应着java.lang.Class类。类是对象的抽象,而Class类是对类信息的抽象。

 为什么需要Class对象?

1、当程序在运行时需要识别对象和类的信息时,就会需要用到Class对象中的信息。即RTTI(Run-Time Type Identification)运行时类型识别 ,是依赖Class对象来完成功能。java语言的多态性就是基于RTTI实现的。可见,Class对象非常重要!!

2、java的反射机制也要依赖Class对象来实现。(动态代理的实现依赖的是反射机制)

反射机制:即动态的获取类和对象的信息以及动态调用类和对象的方法的功能。反射机制需要在运行时识别类和对象的信息,和RTTI不同的是,反射机制需要程序管理Class对象,而RTTI不需要(由JVM管理)。反射机制和RTTI的本质是一样的,都是在运行时识别类和对象的信息。

 3、由1和2可知,在生成任何java对象(除了Class对象)之前,必须要先在内存中生成对应的Class对象供给程序使用。

如何获取Class对象?(4种方式)

1、Class.forName("类的全限定名");

2、对象.getClass();

3、类.class;

4、ClassLoader.loadClass(String)

说明:调用Class.forName()会执行静态初始化等初始化工作,而类.class则不会。此外,ClassLoader.loadClass(String)也是仅仅加载类,不执行类初始化;可以通过Class.forName(String, boolean, ClassLoader)第二个参数来仅仅加载类不执行初始化;

Class对象和类是一一对应的吗?

不是。不同的加载器(ClassLoader)加载同一个类(同一个.class文件),获得的Class对象是不相同的。但是,加载器的实现原理使用的是委派机制,这样确保了同一个类只会被一个加载器所加载。除非故意而为之,否则jvm缓存中某个类对应的Class对象是唯一的。

关于类的加载,参考:https://blog.csdn.net/m0_38075425/article/details/81627349

关于Class对象的详解,参考:https://blog.csdn.net/mcryeasy/article/details/52344729

 觉得有用的老铁赞一下呗!

发布了78 篇原创文章 · 获赞 131 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/river66/article/details/103606336