java - 调用 Class.class.getClass() 时到底发生了什么?

标签 java class reflection

String.class.getClass()不难理解,就是返回一个Class Object,表示String Object的运行时类。但是当调用 Class.class.getClass() 时发生了什么,我是否可以将其理解为返回一个代表 Class 对象本身的运行时类的 Class 对象?这如何在 Java 反射 API 中实现?

最佳答案

a Class object that represent the run time class of Class object itself?

是的。

但是 String.class.getClass() 是一回事。

String.class 已经表示“表示 String 类的 Class 类型的对象”。调用 .getClass() 意味着“表示 Class 类的 Class 类型的对象”,因为我们是在 Class 类型的对象上调用它。

如果您有一个字符串对象,例如“hi mom”,那么您可以使用 .getClass() 反射(reflect)它:("hi mom").getClass( ) 例如。 IIRC,在正常情况下,这将返回与 String.class 完全相同的对象,因为每个类只有一个 Class 对象(每个 ClassLoader 使用中)。

How can this be implemented in Java reflection API?

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

关于java - 调用 Class.class.getClass() 时到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622167/

相关文章:

java - 用中间的回车符分割字符串(JAVA)

Javascript 类和自定义事件

python类对象定义

java - 使用反射实现 this.class 的正确方法

java - 用于 Java/Android 的自定义 Lint 如果我们发现类调用而没有实现其接口(interface),则报告

SSLSocket 创建时的 Java 异常

Python:每个类一个模块(文件.py)?

c# - 使用 CoreCLR 时 Activator.CreateInstance 抛出 'System.MissingMethodException'

c# - 使用 Lambda 表达式会导致类类型发生更改

java - 限制javapackager添加的模块