调用Class.class.getClass()时会发生什么?

时间:2011-07-08 08:57:50

标签: java class reflection

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

2 个答案:

答案 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