我经常发现在调试程序时,在代码块中插入一个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试图成为一个保姆,还是有充分的理由使这成为编译器错误?
我在Eclipse中尝试了以下内容:
if (false) {}:警告'死码'while (false) {}:编译错误'无法访问的代码'我想知道这种差异是否存在真正的"原因".我已经发现了......
...但为什么不允许while (false)相同的调试目的?
可能重复:
为什么此代码出现"无法访问的语句"错误?
这似乎是一个非常简单的问题,我在一本书中找到了这个问题.如果有人帮我弄清楚为什么我会收到错误.
do {
System.out.print("inside do");
} while (false);
while (false) { // error
System.out.print("inside while");
}
System.out.print("outside");
Run Code Online (Sandbox Code Playgroud)
我想,根据我的说法,输出应该在dooutside里面.但是,它显示编译器错误:无法访问的语句.然后,我试图找出,为什么,它显示编译错误:无法到达的语句*.所以,我改变了上面这样的代码
boolean i = false;
do {
System.out.print("inside do");
} while (false);
while (i) { // ok
System.out.print("inside while");
}
System.out.print("outside");
Run Code Online (Sandbox Code Playgroud)
现在,它显示了预期的输出,即在dooutside内.所以,我的问题是 - 第一和第二种情况有什么不同?另外,当我检查
if(false){
//something here
}
Run Code Online (Sandbox Code Playgroud)
然后,上面的代码执行没有任何错误.
java if-statement while-loop control-flow unreachable-statement