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

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

為什么不能在 Java 中調用空指針上的方法?

為什么不能在 Java 中調用空指針上的方法?

Go
冉冉說 2021-06-17 18:15:33
在 Go 中,可以在空指針上調用方法,只要該指針永遠不會被取消引用:type empty struct{}func (e *empty) Allocated() bool { return e != nil }(對于可運行的代碼,請單擊此處)然而,在 Java 中,在空指針上調用方法,即使該方法從不取消對任何成員變量的引用,仍然會導致空指針異常:class Test {    public boolean Allocated() { return this != null; }}有人知道為什么存在這種行為嗎?它有什么好處嗎?想法?
查看完整描述

3 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

這是因為所有 Java 方法都是虛擬的。

編寫時someInstance.Allocated(),運行時需要檢查是否someInstance實際上是覆蓋該方法的派生類型。

從理論上講,此限制本可以針對finalprivate方法放寬。
我假設語言設計者選擇不這樣做是為了一致性。(因此刪除final不會是一個重大變化)



查看完整回答
反對 回復 2021-06-21
?
MM們

TA貢獻1886條經驗 獲得超2個贊

我認為這是一個哲學問題;方法(靜態方法除外)就其本質而言適用于對象,并且在這種范式中調用像“null”這樣的非對象上的方法是沒有意義的。如果您想定義一個可以應用于對象或“null”的方法,那么定義一個靜態方法就足夠容易了,而且在我看來,這將使調用該方法的代碼不會讓讀者感到困惑。


查看完整回答
反對 回復 2021-06-21
  • 3 回答
  • 0 關注
  • 300 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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