亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么類在 Java 中沒有定義符號,除非您訪問它們的屬性?

為什么類在 Java 中沒有定義符號,除非您訪問它們的屬性?

陪伴而非守候 2024-01-17 17:08:05
考慮最簡單的例子。我們有public class Foo {}因此我們可以說Foo.class // ==> class Foo因此,按理說Foo應該是 a java.lang.Class,因為我們顯然可以訪問它并且可以在當前上下文中操縱它。然而Foo instanceof java.lang.Class引發錯誤cannot find symbol   symbol:    variable Foo Foo instanceof java.lang.Class ^-^不過,這與 instanceof 本身無關;只是Foo單獨在 OpenJDK shell 中會產生相同的錯誤。Foo如果Foo當前上下文中不存在,我們如何訪問屬性?
查看完整描述

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上面描述的。這并不意味著類型名稱通常可以用作其自己的對象。類型名稱只能作為較大表達式的一部分,否則可能不相關。


查看完整回答
反對 回復 2024-01-17
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

Foo是一種類型Foo.class是一個代表類型的對象。

instanceof運算符將對象作為其第一個參數,將類型作為其第二個參數。Foo不能作為第一個參數,因為它不是一個對象 - 它是一種類型。

至于為什么你可以這樣做Foo.class……好吧,這就是 Java 語法的工作方式。Class類本身的結構在運行時是已知的,并由該類的所有實例共享的對象表示。語法.class是訪問該對象的一種方法。


查看完整回答
反對 回復 2024-01-17
  • 2 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號