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
是訪問該對象的一種方法。
添加回答
舉報