繁体   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