Und*_*Dog 8 java unreachable-code
class For1
{
  public static void main(String args[])
  {
    int a = 0;
    for(;;)
    {
      break;
      System.out.println(a); //Line 1
      ++a;//Line 2
    }
  }
}
我知道第1行/第2行永远不会执行.但我仍然不明白为什么抛出编译时错误.我收到"无法访问的语句"编译错误.
这是否意味着编译器检查它是否能够编译所有分支/代码行?
Jon*_*eet 13
这是否意味着编译器检查它是否能够编译所有分支/代码行?
这意味着编译器会检查每个语句是否可访问.
如果由于无法访问语句而无法执行语句,则会发生编译时错误.
本节致力于对"可达"一词的精确解释.我们的想法是,从构造函数,方法,实例初始化程序或包含语句本身的静态初始化程序开始,必须有一些可能的执行路径.分析考虑了陈述的结构.
然后,该部分记录了如何定义可达性.
特别是,您案例中的相关要点是:
如果S之前的语句可以正常完成,则非空交换块中的每个其他语句S都是可到达的.
一
break,continue,return,或throw语句无法正常完成.
所以你的"第1行"语句前面有一个statement(break;),它无法正常完成,因此它无法访问.
编译器也能够得出这个结论,并假设你犯了一个错误.是的,Java编译器做了相当多的"数据流分析".最常见的相关消息是关于未初始化的变量的消息.第二个最常见的是,我相信,恰恰是这个,关于代码无法访问.
| 归档时间: | 
 | 
| 查看次数: | 64370 次 | 
| 最近记录: |