相关疑难解决方法(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万
查看次数

if(false)vs while(false):无法访问的代码与死代码

我在Eclipse中尝试了以下内容:

  • if (false) {}:警告'死码'
  • while (false) {}:编译错误'无法访问的代码'

我想知道这种差异是否存在真正的"原因".我已经发现了......

无法访问的代码编译器错误

...但为什么不允许while (false)相同的调试目的?

java dead-code unreachable-code

25
推荐指数
2
解决办法
6121
查看次数

在java中使用while循环无法访问的语句错误

可能重复:
为什么此代码出现"无法访问的语句"错误?

这似乎是一个非常简单的问题,我在一本书中找到了这个问题.如果有人帮我弄清楚为什么我会收到错误.

    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

2
推荐指数
2
解决办法
3390
查看次数