理解String.class.getClass()
并不难,这意味着返回表示String Object 的运行时类的类对象。但是在调用Class.class.getClass()
时会发生什么,我可以将其理解为返回一个表示Class对象本身的运行时类的Class对象吗?如何在Java反射API中实现?
答案 0 :(得分:5)
一个Class对象,它表示Class对象本身的运行时类?
是
但是String.class.getClass()
是一回事。
String.class
已经意味着“表示String类的Class类型的对象”。调用.getClass()
就意味着“表示类类的类型的对象”,因为我们在类型为Class的对象上调用它。
如果你有一个String对象,例如“hi mom”,那么你可以用.getClass()
:("hi mom").getClass()
来反映它。 IIRC,在正常情况下,这将返回与String.class
完全相同的对象,因为每个类只有一个Class
个对象(每个ClassLoader
正在使用中)。
如何在Java反射API中实现?
每次加载类的字节码时,都会创建一个Class对象并将其与该字节码相关联。每个对象在概念上保持对表示其类的Class实例的“隐藏”引用,该实例由构造函数自动设置。类对象将此引用设置为表示Class类的Class对象。特别是,表示Class类的Class对象引用了本身。
答案 1 :(得分:1)
can I apprehend it as returning a Class object that represent the run time class of Class object itself?
没有。 Object.class.getClass() is same as Class.class.getClass()
。
System.out.println(Object.class.getClass() == Class.class.getClass()); // true