为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

大话西游666 2022-08-03 12:58:18
我认为下面的Java代码会导致运行时错误(从技术上讲),因为它引用了不存在的东西(就像访问大小为5的数组中的第8个元素一样)。int i; System.out.println(i);但是,IDE 会捕获它,并用红色加下划线。这是否使它成为语法/编译器错误?还是 IDE 足够智能可以捕获的运行时错误?实际上,这是编译器错误,但从技术上讲不是语法错误吗?我一直认为它们是同义词,但也许语法错误只是编译器错误的一种类型......我知道这只是语义学,但我正在教一门课,不知道它在技术上是什么类型的错误,感觉很傻。
查看完整描述

3 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

如果 是 声明局部变量, 则在将其赋值之前使用它是错误的;请参阅@Eran对JLS相关部分的回答。int i;

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

这是否使它成为语法/编译器错误?

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

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

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

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

  • 编译时类型错误

  • 编译器无法解析的符号

  • 对上下文具有错误种类的符号

  • 无法访问的代码

  • 使用未初始化的变量

  • 等等。

还是 IDE 足够智能可以捕获的运行时错误?

这不是运行时错误。

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

正确。

我一直认为它们是同义词,但也许语法错误只是编译器错误的一种类型......

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

(不幸的是,一些Javascript实现令人困惑地将所有编译错误称为“语法错误”。但是,如果您正在教授Java,那么这无关紧要。Java不是Javascript。


查看完整回答
反对 回复 2022-08-03
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

这是一个编译时错误,由 JLS 指定:

14.4.2. 局部变量声明的执行

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

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


查看完整回答
反对 回复 2022-08-03
?
千巷猫影

TA贡献1829条经验 获得超7个赞

您是否尝试过在没有IDE的情况下编译它?
在Java中,它被检测为编译时错误,说:错误:变量i可能尚未初始化

查看完整回答
反对 回复 2022-08-03
  • 3 回答
  • 0 关注
  • 218 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信