Java中的类文字是什么?

gam*_*ver 54 java literals

Java教程:

最后,还有一种特殊的文字称为类文字,通过采用类型名称并附加" .class"来形成; 例如,String.class.这指的Class是表示类型本身的对象(类型).

这个文字可以分配给哪种类型的变量?

如果可能,请举一个小例子.

Ste*_*ker 48

Class<String> c = String.class;
Run Code Online (Sandbox Code Playgroud)

查看Javadoc,java.lang.Class看看你能用这些小家伙做些什么 - 主要与反射有关


shi*_*kou 37

要理解这一点,您必须了解String是类Class的实例(对象).字符串文字(例如"我是一个字符串.")是表示类String的实例(对象)的符号,而类文字(例如Hashtable.class)是表示类Class的实例的符号.

  • `String`本身不是类`Class`的实例.它有一个文字`String.class`,它是`Class <String>`的一个实例.如果它是`Class`类型的实例,则`String.class`将是`Class <Class>`的实例.`String`不是任何事物的实例. (7认同)
  • @shinkou String 是 Class 类的实例(对象)。怎么会?应该是“String.class是类Class的实例(对象)”对吧? (2认同)
  • @shinkou,无论动机如何,错误的陈述都不会“使事情更容易理解”。contraAuireire_,他们引起误会和混乱。不要散布不真实的东西。 (2认同)

Ben*_*Ben 22

感谢这里的其他好答案,你知道它是什么,但这里是一个典型的用法示例,也可以澄清:

    private static Logger log = Logger.getLogger(YourClassHere.class);
Run Code Online (Sandbox Code Playgroud)

正如代码所示,这是我们初始化日志框架的一条线(在这个例子中,我使用的是org.apache.log4j包,但原理扩展到其他框架).该getLogger()方法需要一个类文字,因此它知道它的日志记录(即当前对象的类).

  • 这比引用JavaDocs或其他一些定义的帮助大约多1000倍; 谢谢! (4认同)

sta*_*ker 11

根据JLS

15.8.2类文字

类文字是一个表达式,由类,接口,数组或基本类型的名称组成,后跟a .和标记class.类文字的类型是Class.它计算void为由当前实例的类的定义类加载器定义的命名类型(或for )的Class对象.


ber*_*ami 5

文字本身是MyClass. 如果你写,MyClass.class你会得到一个类对象的引用。如果您编写new MyClass(),它会使用字面量来为您获取所获得的类对象的实例MyClass.class。从实例中,您可以通过调用myClassInstance.getClass().

我不是 100% 确定,但文字本身不能分配给任何变量。您可以做的是将类的名称作为字符串获取并使用反射框架创建一个实例。

  • 文字本身不是类名。根据 https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.8.2,类文字是标记“class”。来自 JLS:“类文字是由类、接口、数组或原始类型的名称或伪类型 void 组成的表达式,后跟一个 '.' 和令牌类。” 请注意,它不是类的名称,而是后跟`.class` 的名称。 (2认同)

tra*_*god 5

类文字中可以找到一些常见用法作为运行时类型标记.