相关疑难解决方法(0)

为什么Java有"无法访问的语句"编译器错误?

我经常发现在调试程序时,在代码块中插入一个return语句很方便(虽然可以说是不好的做法).我可能会在Java中尝试这样的东西....

class Test {
        public static void main(String args[]) {
                System.out.println("hello world");
                return;
                System.out.println("i think this line might cause a problem");
        }
}
Run Code Online (Sandbox Code Playgroud)

当然,这会产生编译器错误.

Test.java:7:无法访问的语句

我可以理解为什么警告可能是合理的,因为使用未使用的代码是不好的做法.但我不明白为什么这需要产生错误.

这只是Java试图成为一个保姆,还是有充分的理由使这成为编译器错误?

java language-design unreachable-statement

80
推荐指数
6
解决办法
10万
查看次数

无法访问的代码:错误或警告?

这是一个语言设计问题:

您是否认为无法访问的代码(通常是编程语言)应该发出警告(即"报告问题并反正编译")或错误("拒绝编译")?

就个人而言,我强烈认为这应该是一个错误:如果程序员编写了一段代码,那么它应该始终是为了在某些情况下实际运行它.但是,例如C#编译器似乎不同意这一点,只是报告了一个警告.

注意:我意识到良好的死代码检测是一个非常困难的问题,但这不是这个问题的焦点.

以下是一些代码片段的示例,其中一些语句明显无法访问:

return;
foo();
Run Code Online (Sandbox Code Playgroud)

-

throw new Exception();
foo();
Run Code Online (Sandbox Code Playgroud)

-

if (...) {
  return;
} else {
  throw new Exception();
}
foo();
Run Code Online (Sandbox Code Playgroud)

language-agnostic compiler-construction language-design

21
推荐指数
5
解决办法
2万
查看次数