java while循环中不可访问的语句



在此处锁定"死代码"线程时eclipse 中的死代码警告

我尝试了以下简单的java代码:

public class Test2
{
    public static void main(String[] args)
    {
        int x = 0;        
        while(false)
        {                        
            x=4;
        }
    }
}  

它正确地抛出编译时错误

C:Documents and SettingsuserDesktopTest2.java:7: unreachable
statement
        {                        
        ^ 1 error

我稍微调整了一下代码:

public class Test2
{
    public static void main(String[] args)
    {
        int x =0;        
        while(true)
        {                        
            x=4;
        }
    }
}    

它编译得很好。

这是有原因的,为什么编译得很好?

从逻辑上讲,两者都应该导致无限期操作,并且都应该导致编译时错误。

我做错什么了吗?

从逻辑上讲,两者都应该导致的无限长

不完全是:while(false)从未进入循环。

此外,编译器不会警告无限循环——你可能真的想要一个:

while(true) {
    // poll some queue for work
    // if work found do it
    // else sleep 1 second
}

这是有原因的吗?为什么编译得很好

为什么它不应该编译得很好?所有语句都是可访问的,与第一个示例相反:-(

许多程序有意地具有无限循环。(例如,考虑一个服务器,它应该"永远"为客户端服务。(拒绝编译无限循环是没有意义的。

从逻辑上讲,两者都应该导致无限循环,并且都应该导致编译时错误

不,只有第二个会导致无限循环。

只要条件为true,while循环就会继续。由于false从不为真,因此循环体将永远不会被执行(这就是为什么在这种情况下x = 4;是不可访问的(。


注意,如果你这样做…

public class Test2
{
    public static void main(String[] args)
    {
        int x =0;        
        while(true)
        {                        
            x=4;
        }
        x = 4;     <--------- unreachable!
    }
}    

它不会编译,因为循环将永远继续,最后一个x = 4;将无法访问。

C:Documents and SettingsuserDesktopTest2.java:7: unreachable statement {
^ 1 error

平均值,there is a code which will be never executed

while(false){ /* this place will be never reached */ }

因为(condition(期望condition是真正的

while(true){ /* this will cause infinite loop */ }

while(false)永远不会进入这个循环。所以CCD_ 10是不可达的。CCD_ 11又是一个无限循环。

while(false)从不进入循环,因此无法访问某些代码,这就是为什么会出现编译时错误。

while(true)在您的示例中会导致无穷大的结果,因此您可能希望出现编译时错误。尽管如此,你可能有一个break在循环中退出它并使其合法!或者,在某些情况下,您可能还需要实际的无限循环(例如,对于守护进程(。这就是为什么你在这种情况下没有错误。

通常,编译器不会警告您无休止的循环,因为它们不一定是编程错误。

此外,在数学上不可能为所有代码可靠地给出这样的错误消息。数学上不可能写出一个算法来证明任何程序是否会终止,或者陷入无休止的循环。如果你想知道细节,可以查一下"暂停问题"。

相关内容

  • 没有找到相关文章

最新更新