调用 MyClass.class 和 MyClass.getClass() 有什么区别

2022-09-02 20:37:28

MyClass.class并且两者似乎都返回.是否存在细微的区别,或者它们可以互换使用吗?另外,是超类类的公共财产吗?(我知道这存在,但似乎在javadocs中找不到任何提及它的地方)MyClass.getClass()java.lang.ClassMyClass.classClass


答案 1

一个是实例方法,所以它返回特定对象的类,另一个是Class常量(即在编译时已知)。

 Class n = Number.class;
 Number o = 1;
 o.getClass() // returns Integer.class
 o = BigDecimal.ZERO;
 o.getClass();  // returns BigDecimal.class

这两种情况都返回 Class 对象的实例,该对象描述特定的 Java 类。对于同一类,它们返回相同的实例(每个类只有一个 Class 对象)。

访问类对象的第三种方法是

Class n = Class.forName("java.lang.Number");

请记住,接口还具有 Class 对象(如上面的 Number)。

此外,MyClass.class超类类的公共属性吗?

它是一个语言关键字。


答案 2

.getClass()返回对象的运行时类,因此在更改变量的类时可以对其进行修改

.class另一方面,始终返回“类型”的类常量

注意:
如果运行时类恰好与 TYPE 类相同,则两者将相等。例:

Long x = new Long(2);
Class c1 = Long.class;
Class c2 = x.getClass();

//c1==c2