3 回答

TA貢獻1872條經驗 獲得超4個贊
如果 是 聲明局部變量, 則在將其賦值之前使用它是錯誤的;請參閱@Eran對JLS相關部分的回答。int i;
編譯錯誤和編譯時錯誤是同義詞。(編譯器錯誤是另一個同義詞,盡管有時人們用它來指代編譯器中的錯誤。
這是否使它成為語法/編譯器錯誤?
這是一個編譯錯誤。但這不是語法錯誤。
這種類型的編譯錯誤通常稱為語義錯誤。
語法錯誤意味著代碼不符合語言的指定語法(由語法定義)。換句話說,解析器無法解析它。
語義錯誤是任何不是語法錯誤的編譯錯誤。根據編程語言的不同,語義錯誤可能包括以下內容:
編譯時類型錯誤
編譯器無法解析的符號
對上下文具有錯誤種類的符號
無法訪問的代碼
使用未初始化的變量
等等。
還是 IDE 足夠智能可以捕獲的運行時錯誤?
這不是運行時錯誤。
實際上,這是編譯器錯誤,但從技術上講不是語法錯誤嗎?
正確。
我一直認為它們是同義詞,但也許語法錯誤只是編譯器錯誤的一種類型......
它們不是同義詞。語法錯誤只是編譯錯誤的一種。
(不幸的是,一些Javascript實現令人困惑地將所有編譯錯誤稱為“語法錯誤”。但是,如果您正在教授Java,那么這無關緊要。Java不是Javascript。

TA貢獻1803條經驗 獲得超3個贊
這是一個編譯時錯誤,由 JLS 指定:
局部變量聲明語句是可執行語句。每次執行時,聲明符都按從左到右的順序進行處理。如果聲明器具有初始化表達式,則計算該表達式并將其值分配給變量。
如果聲明符沒有初始化表達式,則對變量的每次引用之前都必須執行對變量的賦值,否則 §16 的規則會發生編譯時錯誤。
添加回答
舉報