2 回答
TA贡献1865条经验 获得超7个赞
类名可以在源代码中用作许多不同表达式的一部分。这并不意味着类名本身就是一个对象;而是意味着类名本身就是一个对象。它只是意味着名称本身可以用作更大表达式的一部分。这些不是“属性”或属性;而是“属性”。它们是其他语法结构,用于形成具有许多不同部分的表达式。
JLS 定义了如何Foo
使用“TypeName”,例如,在第 15 章中形成表达式。具体来说:
第 15.8.2 节,类文字。
类型名称{[ ]} 。
class
第 15.8.4 节,限定 this,以访问词法封闭类。
类型名称.
this
第 15.11 节, 字段访问表达式,将词法封闭类作为超类进行访问。
类型名称.
super
。标识符第 15.12 节, 方法调用表达式,调用静态方法。
类型名称. [类型参数]标识符([参数列表])
类型名称.
super
。[类型参数]标识符([参数列表])第 15.13 节,方法引用表达式,引用稍后可能调用的封闭类的方法。
类型名称 .
super
:: [类型参数] 标识符
它也可能是适用于其他表达式的“参考类型”,例如:
第 15.16 节, 强制转换表达式,创建强制转换表达式。
(参考类型{ AdditionalBound })UnaryExpressionNotPlusMinus
第 15.20.2 节,类型比较运算符
instanceof
,使用instanceof
.关系表达式
instanceof
引用类型
类型名称有特定的用途,例如Foo
上面描述的。这并不意味着类型名称通常可以用作其自己的对象。类型名称只能作为较大表达式的一部分,否则可能不相关。
TA贡献1780条经验 获得超5个赞
Foo
是一种类型。Foo.class
是一个代表类型的对象。
该instanceof
运算符将对象作为其第一个参数,将类型作为其第二个参数。Foo
不能作为第一个参数,因为它不是一个对象 - 它是一种类型。
至于为什么你可以这样做Foo.class
……好吧,这就是 Java 语法的工作方式。Class
类本身的结构在运行时是已知的,并由该类的所有实例共享的对象表示。语法.class
是访问该对象的一种方法。
添加回答
举报