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

Java 使用未初始化变量时会发生什么类型的错误?,java,compiler-errors,runtime-error,Java,Compiler Errors,Runtime Error,我认为下面的Java代码会导致运行时错误(从技术上讲),因为它引用了一些不存在的东西(很像访问大小为5的数组中的第8个元素) 然而,IDE捕捉到了它,并用红色下划线。这会导致语法/编译器错误吗?或者是IDE智能到足以捕获的运行时错误 实际上,这是一个编译器错误,但从技术上讲不是语法错误吗?我一直认为它们是同义词,但可能语法错误只是一种编译器错误 我知道这只是语义学,但我在教一门课,不知道它在技术上是什么类型的错误,我觉得很傻。这是编译时错误,正如JLS所规定的: 局部变量声明语句是可执行语句。

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

然而,IDE捕捉到了它,并用红色下划线。这会导致语法/编译器错误吗?或者是IDE智能到足以捕获的运行时错误

实际上,这是一个编译器错误,但从技术上讲不是语法错误吗?我一直认为它们是同义词,但可能语法错误只是一种编译器错误


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

这是编译时错误,正如JLS所规定的:

局部变量声明语句是可执行语句。每次执行时,声明器都按从左到右的顺序进行处理。如果一个声明符有一个初始化表达式,则对该表达式求值,并将其值赋给该变量

如果声明器没有初始化表达式,则对变量的每次引用之前必须先执行对变量的赋值,或编译时错误根据§16的规则发生


您是否尝试过在没有IDE的情况下编译它?

在Java中,它被检测为编译时错误,表示:错误:变量i可能未初始化

这是一个简单的运行时错误。IDE会指出,但是如果你运行它,你会得到一些错误,比如我需要初始化如果
inti
声明了一个局部变量,在分配给它之前使用它是一个编译错误;有关JLS的相关部分,请参见@Eran的答案

编译错误和编译时错误是同义词。(编译器错误是另一个同义词,尽管有时人们用它来指编译器中的错误。)

这会导致语法/编译器错误吗

这是一个编译错误。但这不是一个语法错误

这种类型的编译错误通常称为语义错误

语法错误意味着代码不符合语言的指定语法(由语法定义)。换句话说,解析器无法解析它

语义错误是任何不是语法错误的编译错误。根据编程语言的不同,语义错误可能包括以下内容:

  • 编译时类型错误
  • 编译器无法解析的符号
  • 与上下文类型不符的符号
  • 不可达代码
  • 未初始化变量的使用
  • 等等
或者是IDE智能到足以捕获的运行时错误

这不是一个运行时错误

实际上,这是一个编译器错误,但从技术上讲不是语法错误吗

我一直认为它们是同义词,但可能语法错误只是一种编译器错误

它们不是同义词。语法错误只是编译错误的一种


(不幸的是,一些Javascript实现混淆地将所有编译错误称为“语法错误”。但如果您正在教授Java,则这与此无关。Java不是Javascript。)

这不是运行时错误。该错误在编译时引发。
int i;
System.out.println(i);