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

Man*_*uPK 1 java compiler-construction exception

假设我在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");
Run Code Online (Sandbox Code Playgroud)

如果if(true)被注释,将出现无法访问的代码错误消息.为什么编译器不知道下面的行if(true)总会被执行?

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

Jon*_*eet 6

它是围绕代码可达性的有意设计的一部分.参见JLS的第14.21节,其底部有一节.

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

static final boolean DEBUG = false;
Run Code Online (Sandbox Code Playgroud)

然后编写如下代码:

if (DEBUG) { x=3; }
Run Code Online (Sandbox Code Playgroud)

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