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

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

使用未初始化的變量時發生什么類型的錯誤?

使用未初始化的變量時發生什么類型的錯誤?

大話西游666 2022-08-03 12:58:18
我認為下面的Java代碼會導致運行時錯誤(從技術上講),因為它引用了不存在的東西(就像訪問大小為5的數組中的第8個元素一樣)。int i; System.out.println(i);但是,IDE 會捕獲它,并用紅色加下劃線。這是否使它成為語法/編譯器錯誤?還是 IDE 足夠智能可以捕獲的運行時錯誤?實際上,這是編譯器錯誤,但從技術上講不是語法錯誤嗎?我一直認為它們是同義詞,但也許語法錯誤只是編譯器錯誤的一種類型......我知道這只是語義學,但我正在教一門課,不知道它在技術上是什么類型的錯誤,感覺很傻。
查看完整描述

3 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

如果 是 聲明局部變量, 則在將其賦值之前使用它是錯誤的;請參閱@Eran對JLS相關部分的回答。int i;

編譯錯誤和編譯時錯誤是同義詞。(編譯器錯誤是另一個同義詞,盡管有時人們用它來指代編譯器中的錯誤。

這是否使它成為語法/編譯器錯誤?

這是一個編譯錯誤。但這不是語法錯誤。

這種類型的編譯錯誤通常稱為語義錯誤。

語法錯誤意味著代碼不符合語言的指定語法(由語法定義)。換句話說,解析器無法解析它。

語義錯誤是任何不是語法錯誤的編譯錯誤。根據編程語言的不同,語義錯誤可能包括以下內容:

  • 編譯時類型錯誤

  • 編譯器無法解析的符號

  • 對上下文具有錯誤種類的符號

  • 無法訪問的代碼

  • 使用未初始化的變量

  • 等等。

還是 IDE 足夠智能可以捕獲的運行時錯誤?

這不是運行時錯誤。

實際上,這是編譯器錯誤,但從技術上講不是語法錯誤嗎?

正確。

我一直認為它們是同義詞,但也許語法錯誤只是編譯器錯誤的一種類型......

它們不是同義詞。語法錯誤只是編譯錯誤的一種。

(不幸的是,一些Javascript實現令人困惑地將所有編譯錯誤稱為“語法錯誤”。但是,如果您正在教授Java,那么這無關緊要。Java不是Javascript。


查看完整回答
反對 回復 2022-08-03
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

這是一個編譯時錯誤,由 JLS 指定:

14.4.2. 局部變量聲明的執行

局部變量聲明語句是可執行語句。每次執行時,聲明符都按從左到右的順序進行處理。如果聲明器具有初始化表達式,則計算該表達式并將其值分配給變量。

如果聲明符沒有初始化表達式,則對變量的每次引用之前都必須執行對變量的賦值,否則 §16 的規則會發生編譯時錯誤。


查看完整回答
反對 回復 2022-08-03
?
千巷貓影

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

您是否嘗試過在沒有IDE的情況下編譯它?
在Java中,它被檢測為編譯時錯誤,說:錯誤:變量i可能尚未初始化

查看完整回答
反對 回復 2022-08-03
  • 3 回答
  • 0 關注
  • 341 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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