据我所知;
是一个空话。它在14.6 of the JLS部分中指定:
空语句什么都不做。
EmptyStatement:;
空语句的执行总是正常完成。
当我使用double defaultValue = 0.0;;
然后它的工作正常但我遇到了一个问题,当我使用下面的代码然后它的抛出错误:
public double getX() {
return x;; // Throws unreachable code
}
为什么会抛出错误?
答案 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
会立即返回 ,因此无法在其后执行其他代码。