Java 调用Class.Class.getClass()时,引擎盖下面会发生什么?

Java 调用Class.Class.getClass()时,引擎盖下面会发生什么?,java,class,reflection,Java,Class,Reflection,不难理解String.class.getClass(),这意味着返回一个表示String对象的运行时类的类对象。但是调用Class.Class.getClass()时会发生什么,我能理解为返回一个Class对象,它表示Class对象本身的运行时类吗?如何在Java反射API中实现这一点 表示类对象本身的运行时类的类对象 对 但是String.class.getClass()是一样的 String.class已经表示“表示字符串类的class类型的对象”。对其调用.getClass(),意味着“表

不难理解
String.class.getClass()
,这意味着返回一个表示String对象的运行时类的类对象。但是调用
Class.Class.getClass()
时会发生什么,我能理解为返回一个Class对象,它表示Class对象本身的运行时类吗?如何在Java反射API中实现这一点

表示类对象本身的运行时类的类对象

但是
String.class.getClass()
是一样的

String.class
已经表示“表示字符串类的class类型的对象”。对其调用
.getClass()
,意味着“表示类的类类型的对象”,因为我们对类类型的对象调用它

如果对象是字符串,例如“hi-mom”,则可以使用
.getClass()
(“hi-mom”).getClass()
来反映它。IIRC,这将在正常情况下返回与
String.class
完全相同的对象,因为每个类(,每个
ClassLoader
正在使用)只有一个
class
对象

如何在Java反射API中实现这一点

每次加载类的字节码时,都会创建一个类对象并与该字节码关联。从概念上讲,每个对象都对表示其类的类实例保留一个“隐藏”引用,该引用由构造函数自动设置。类对象将此引用设置为表示类的类对象。特别是,表示类的类对象有一个对本身的引用

否。
Object.class.getClass()与class.class.getClass()相同。


getClass()
是由每个对象实现的,它不是反射API(或任何其他API)的一部分。哦,天哪,如果你看过Smalltalk的反射模型,你会大吃一惊的。强烈推荐。您实际获得一个常量(代码将编译为常量)以添加到Peter所说的内容中,该类(通常)是对象头的一部分,或者在某些情况下,它可以是引用(指针)本身的一部分。
can I apprehend it as returning a Class object that represent the  run time class of Class object itself?
    System.out.println(Object.class.getClass() == Class.class.getClass()); // true