Ste*_*ers 6 java if-statement compiler-errors conditional-statements unreachable-statement
我正在为 Java 考试而学习,遇到了“unreachable statement”编译器错误,例如:
Source.java:10: error: unreachable statement
System.out.println("This code is not reachable");
Run Code Online (Sandbox Code Playgroud)
我试图了解何时会或不会发生这种情况-例如,在这些情况下不会发生这种情况:
// Case #1
if (true) {
System.out.println("This code is reachable");
} else {
System.out.println("This code is not reachable"); // Compiles OK
}
// Case #2
for (i = 0; i < 5; i++) {
if (true) continue;
System.out.println("This code is not reachable"); // Compiles OK
}
Run Code Online (Sandbox Code Playgroud)
似乎编译器不够聪明,无法检测到if条件何时持续true- 有人可以提供更详细的解释吗?
来自 Java 语言规范,14.21。无法访问的语句(我强调):
如果由于无法访问语句而无法执行语句,则会出现编译时错误。
本节致力于精确解释“可达”一词。这个想法是从包含语句的构造函数、方法、实例初始值设定项或静态初始值设定项的开始到语句本身必须有一些可能的执行路径。分析考虑了报表的结构。除了对 条件表达式的常量值为真的、 和语句进行特殊处理外
while,流分析中不考虑表达式的值dofor。
因此,虽然代码确实无法访问,但编译器明确不认为它如此。陈述的原因是允许程序员定义“标志”变量,例如
static final boolean DEBUG = false;
if (DEBUG) { x=3; }
Run Code Online (Sandbox Code Playgroud)
它应该是可以切换DEBUG之间false,并true无需代码改变任何东西(由于编译错误)。