为什么显示异常

时间:2016-02-04 05:07:05

标签: java

据我所知;是一个空话。它在14.6 of the JLS部分中指定:

空语句什么都不做。

EmptyStatement:;

空语句的执行总是正常完成。

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

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

为什么会抛出错误?

3 个答案:

答案 0 :(得分:7)

它是一个有效的声明,但它也是JLS 14.21中指定的无法访问的声明:

  

如果语句因无法访问而无法执行,则为编译时错误。

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

  

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

     

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

因为return语句无法正常完成,同一个块中的以下语句将无法访问。

答案 1 :(得分:3)

Java抛出错误,因为空语句;在返回语句后出现,因此永远不会到达:

public double getX() {
    return x;   // your program will always return from getX() here
    ;           // this line will never be reached
}

请注意,这是由编译器捕获的,并且空语句没有任何内在错误。

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

答案 2 :(得分:1)

因为它跟随return;它始终无法访问的代码,如错误所示。

根据定义,无条件return之后的任何语句都是无法访问的。所以,确定它有效;事实上,它可能是任何有效的声明(继续并尝试),它将表现相同。

它无法访问,因为return会立即返回 ,因此无法在其后执行其他代码。