Java编译器是设计为这样工作还是限制?

时间:2012-03-01 13:29:36

标签: exception compiler-construction java

说我在Java类中有以下行,

System.out.println("start");
if(true)//The compiler will give compile time error if I uncomment this. 
    throw new RuntimeException();
System.out.println("end");

如果if(true)被评论,则会出现无法访问的代码错误消息。为什么编译器不知道if(true)下的行总是会被执行?

Java编译器的设计是这样工作还是限制?

2 个答案:

答案 0 :(得分:6)

这是围绕代码可达性的有意设计的一部分。请参阅JLS的section 14.21,其底部有关于此的部分。

  

这种不同处理的基本原理是允许程序员定义“标志变量”,例如:

static final boolean DEBUG = false;
     

然后编写如下代码:

if (DEBUG) { x=3; }
     

我们的想法是,应该可以将DEBUG的值从false更改为true或从true更改为false,然后正确编译代码而不对程序文本进行其他更改。

答案 1 :(得分:1)

这是一个限制,你要检查你有多远的代码或代码永远不会运行。

JVM可以检测到代码已经死了而不能编译它。