Java中的类文字究竟是什么类型的?

Hải*_*ong 3 java literals

在Java教程http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html中,类文字被称为"文字类型"

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

但是在Java规范http://docs.oracle.com/javase/specs/jls/se7/html/中,类文字不是放在3.10 Literals类型下,而是置于15.8之下.主要表达

那为什么呢?

Ste*_*n C 6

Java中的类文字究竟是什么类型的?

擦除类型是java.lang.Class.

非擦除类型Foo.class将是java.lang.Class<Foo>.


它作为主要表达式在JLS中的原因是技术性的:

  • 类文字不是单一文字.它是三个(或更多)不同的符号,它们组合起来形成这种"不变的,字面上的东西".

  • 他们决定调用它字面,因为该值是一个常数.

  • 从语法的角度来看,它必须与(其他)主要表达式进入语法的相同部分......以便语法描述语言而没有大量的歧义/上下文敏感性.

所以它真的可以进入JLS的任何一个地方.但他们必须把它放在一个地方.由于Literal部分中的其他文字是单一的(即一个符号),因此将它放入Primary Expression部分是有意义的.

但最重要的是,为什么他们决定以这种方式组织JLS并不重要.类文字的含义并不取决于它的指定位置.