使用未初始化的变量时发生什么类型的错误?

我认为下面的Java代码会导致运行时错误(从技术上讲),因为它引用了不存在的东西(就像访问大小为5的数组中的第8个元素一样)。

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

但是,IDE 会捕获它,并用红色加下划线。这是否使它成为语法/编译器错误?还是 IDE 足够智能可以捕获的运行时错误?

实际上,这是编译器错误,但从技术上讲不是语法错误吗?我一直认为它们是同义词,但也许语法错误只是编译器错误的一种类型......

我知道这只是语义学,但我正在教一门课,不知道它在技术上是什么类型的错误,感觉很傻。


大话西游666
浏览 225回答 3
3回答

守着一只汪

如果 是 声明局部变量, 则在将其赋值之前使用它是错误的;请参阅@Eran对JLS相关部分的回答。int i;编译错误和编译时错误是同义词。(编译器错误是另一个同义词,尽管有时人们用它来指代编译器中的错误。这是否使它成为语法/编译器错误?这是一个编译错误。但这不是语法错误。这种类型的编译错误通常称为语义错误。语法错误意味着代码不符合语言的指定语法(由语法定义)。换句话说,解析器无法解析它。语义错误是任何不是语法错误的编译错误。根据编程语言的不同,语义错误可能包括以下内容:编译时类型错误编译器无法解析的符号对上下文具有错误种类的符号无法访问的代码使用未初始化的变量等等。还是 IDE 足够智能可以捕获的运行时错误?这不是运行时错误。实际上,这是编译器错误,但从技术上讲不是语法错误吗?正确。我一直认为它们是同义词,但也许语法错误只是编译器错误的一种类型......它们不是同义词。语法错误只是编译错误的一种。(不幸的是,一些Javascript实现令人困惑地将所有编译错误称为“语法错误”。但是,如果您正在教授Java,那么这无关紧要。Java不是Javascript。

繁星点点滴滴

这是一个编译时错误,由 JLS 指定:14.4.2. 局部变量声明的执行局部变量声明语句是可执行语句。每次执行时,声明符都按从左到右的顺序进行处理。如果声明器具有初始化表达式,则计算该表达式并将其值分配给变量。如果声明符没有初始化表达式,则对变量的每次引用之前都必须执行对变量的赋值,否则 §16 的规则会发生编译时错误。

千巷猫影

您是否尝试过在没有IDE的情况下编译它?在Java中,它被检测为编译时错误,说:错误:变量i可能尚未初始化
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java