实际上这是一个三部分的问题。
1我想知道我们在什么情况下使用关键字class
。很明显,我们使用它来定义一个类。但是在表达式中使用SomeClass.class
的目的是什么?
2我在Wikipedia上读到它可以代替表达式new SomeClass().getClass()
使用。但是,当我们已经可以使用new SomeClass().getClass()
表达式时,为什么需要它呢?
3何时需要在语句中使用此SomeClass.class
表达式?
我指的是匿名内部类,在我看来我们不能在静态方法中使用getClass()
方法。
但是在表达式中使用
SomeClass.class
的目的是什么?
它称为类文字;参见JLS 15.8.2。
目的是获得Class
表示的类的SomeClass
对象。 (但是您已经知道...)
但是当我们已经可以使用
new SomeClass().getClass()
表达式时为什么需要这个?
因为new SomeClass()
创建了SomeClass()
的新实例:
abstract
。而且我们何时需要在语句中使用此
SomeClass.class
表达式?
有许多涉及反射的用例,在这些用例中,您需要Class
对象用于类进行操作。首先阅读a good tutorial on Java reflection。
我指的是匿名内部类
类文字不能用于获取匿名内部类的Class
。但是this.getClass()
可以使用。
...在我看来,我们不能在静态方法中使用
getClass()
方法。
嗯,我想那是您需要一个类文字的情况。
但是严格来讲,您可以以静态方法调用getClass()
。问题是您不能在this
上显式或隐式调用它。