【发布时间】:2012-02-14 11:53:53
【问题描述】:
以下代码给出unreachable statement 编译器错误
public static void main(String[] args) {
return;
System.out.println("unreachable");
}
有时出于测试目的,想要阻止调用某个方法,因此一种快速的方法(而不是在使用它的任何地方都将其注释掉)是立即从该方法返回,以便该方法不执行任何操作。然后我总是做围绕编译器错误是这样的
public static void main(String[] args) {
if (true) {
return;
}
System.out.println("unreachable");
}
我只是好奇,为什么是编译器错误?它会以某种方式破坏 Java 字节码,是保护程序员还是别的什么?
另外(这对我来说更有趣),如果将 java 编译为字节码进行任何类型的优化(或者即使它没有),那么为什么它不会在第二个示例中检测到公然无法访问的代码?编译器伪代码将用于检查语句是否不可访问?
【问题讨论】:
-
您可能想在此页面阅读第 14.16 节:java.sun.com/docs/books/jls/second_edition/html/…
-
感谢您的链接。我想我陷入了“汇编程序”的心态,因为我很难掌握由方法调用、
if语句和return引起的“跳转”如何让无法到达的行在第一时间被检测到sn-p 但不是在第二个。 -
使用 if(true) 的好方法....
标签: java compiler-construction