3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個贊
該行為在Java語言規(guī)范中指定:
空引用可用于訪問類(靜態(tài))變量,而不會引起異常。
更詳細(xì)地講,進(jìn)行靜態(tài)評估,例如Primary.staticField
以下工作(重點(diǎn)是我的工作)-在您的情況下Primary = main.getNull()
:
計算主表達(dá)式,并丟棄結(jié)果。[...]
如果該字段是非空白的final字段,則結(jié)果是在類或接口中指定的類變量的值,該變量是Primary表達(dá)式的類型。[...]

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個贊
正如您所說,因?yàn)殪o態(tài)字段不與實(shí)例關(guān)聯(lián)。
從實(shí)例引用訪問靜態(tài)字段的能力(就像您正在做的那樣)僅僅是一種語法糖,沒有其他意義。
您的代碼編譯為
main.getNull();
Main.value

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個贊
每當(dāng)您在編譯時使用對象訪問靜態(tài)變量或方法時,它都會轉(zhuǎn)換為Class名稱。例如:
Main main = null;
System.out.println(main.value);
它將打印靜態(tài)變量value的值,因?yàn)樵诰幾g時它將被轉(zhuǎn)換為
System.out.println(Main.value);
證明:
下載反編譯器并將您的.class文件反編譯為.java文件,您會看到所有靜態(tài)方法或變量引用的對象名將自動替換為類名。
添加回答
舉報