Java 为什么?显示例外

Java 为什么?显示例外,java,Java,据我所知,是一个空语句。第节中有详细说明: 空语句不起任何作用 清空状态: 空语句的执行始终正常完成 当我使用double defaultValue=0.0然后它工作正常,但当我使用下面的代码时,遇到了一个问题,然后抛出错误: public double getX() { return x;; // Throws unreachable code } 为什么会抛出错误?这是一条有效语句,但也是一条无法访问的语句,如中所述: 如果由于无法访问语句而无法执行该语句,则为编译时错误 下面的

据我所知,
是一个空语句。第节中有详细说明:

空语句不起任何作用

清空状态:

空语句的执行始终正常完成

当我使用
double defaultValue=0.0然后它工作正常,但当我使用下面的代码时,遇到了一个问题,然后抛出错误:

public double getX() {
    return x;;  // Throws unreachable code
}

为什么会抛出错误?

这是一条有效语句,但也是一条无法访问的语句,如中所述:

如果由于无法访问语句而无法执行该语句,则为编译时错误

下面的文本描述了如何确定无法访问的语句。特别是:

如果可以访问空语句,则它可以正常完成

break、continue、return或throw语句无法正常完成


因此,由于
return
语句无法正常完成,同一块中的以下语句将变得不可访问。

因为它遵循
返回如错误所示,它始终是无法访问的代码

根据定义,任何在无条件
返回之后的语句都是不可访问的。所以,确定它是有效的;事实上,它可以是任何有效的语句(继续并尝试),它的行为也一样


它是不可访问的,因为
return
立即返回,因此在此之后不能再执行其他代码。

Java抛出错误,因为空语句
位于return语句之后,因此永远不会到达:

public double getX() {
    return x;   // your program will always return from getX() here
    ;           // this line will never be reached
}
请注意,这是由编译器捕获的,存在空语句本身并没有什么问题


Java编译器强制执行此规则,通过删除永远不会执行的代码来最小化运行时字节码的大小。

很高兴知道编译器为什么关心有效但无法访问的代码
UpVoces++
我原以为编译器一般都不会强制执行无法访问的代码,以尽量减少程序员认为可以执行但无法执行的代码所导致的错误。返回后有一个空语句只是其中的一个特例。