簡體   English   中英

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

[英]What type of error occurs when using an uninitialized variable?

我認為以下Java代碼會引起RuntimeError(從技術上來說),因為它引用的內容不存在(就像訪問大小為5的數組中的第8個元素一樣)。

int i;
System.out.println(i);

但是,IDE會捕獲它,並在紅色下划線。 這會使它成為語法/編譯器錯誤嗎? 還是IDE足夠聰明可以捕獲的運行時錯誤?

實際上,這是編譯器錯誤,但從技術上來講不是語法錯誤嗎? 我一直認為它們是同義詞,但是語法錯誤可能只是一種編譯器錯誤...

我知道這只是語義,但是我正在教一門課,但很愚蠢,不知道它在技術上是什么類型的錯誤。

如果int i; 正在聲明局部變量,在將其分配給它之前使用它是編譯錯誤; 有關JLS的相關部分,請參見@Eran的答案。

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

這會使它成為語法/編譯器錯誤嗎?

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

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

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

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

  • 編譯時間類型錯誤
  • 編譯器無法解析的符號
  • 上下文使用錯誤的符號
  • 無法訪問的代碼
  • 使用未初始化的變量
  • 等等。

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

這不是運行時錯誤。

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

正確。

我一直認為它們是同義詞,但是語法錯誤可能只是一種編譯器錯誤...

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

(不幸的是,某些Javascript實現將所有編譯錯誤都稱為“語法錯誤”。但是,如果您在教Java,則無關緊要。Java不是Javascript。)

正如JLS所指定的,這是一個編譯時錯誤:

14.4.2。 執行局部變量聲明

局部變量聲明語句是可執行語句。 每次執行聲明器時,聲明器從左到右依次處理。 如果聲明符具有初始化表達式,則將對該表達式求值並將其值分配給變量。

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

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

這是簡單的運行時錯誤。 IDE會指出這一點,但是如果您運行它,將會收到一些錯誤,例如我需要初始化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM