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

java while循环中的不可访问语句,java,dead-code,Java,Dead Code,在这里挂死代码线程的时候 我尝试了以下简单的java代码: public class Test2 { public static void main(String[] args) { int x = 0; while(false) { x=4; } } } 正确地抛出编译时错误 C:\Documents and S

在这里挂死代码线程的时候

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

public class Test2
{
    public static void main(String[] args)
    {
        int x = 0;        
        while(false)
        {                        
            x=4;
        }
    }
}  
正确地抛出编译时错误

C:\Documents and Settings\user\Desktop\Test2.java:7: unreachable
statement
        {                        
        ^ 1 error

我对代码进行了非常细微的调整:

public class Test2
{
    public static void main(String[] args)
    {
        int x =0;        
        while(true)
        {                        
            x=4;
        }
    }
}    
它编译得很好

有什么原因吗,为什么编译得很好

从逻辑上讲,两者都应该导致无穷大运算,并且都应该导致编译时错误

我做错什么了吗

从逻辑上讲,两者都应该导致无穷大

不完全是这样的:虽然他们从未进入循环

此外,编译器不会警告无限循环-实际上您可能需要一个:

while(true) {
    // poll some queue for work
    // if work found do it
    // else sleep 1 second
}
有什么原因吗,为什么编译得很好

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

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

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

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

只要条件为真,while循环就会继续。因为false永远不会为true,所以循环体永远不会被执行,这就是为什么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 Settings\user\Desktop\Test2.java:7: unreachable statement {
^ 1 error
意味着,有一个永远不会执行的代码

因为什么样的条件期望条件为真

while(true){ /* this will cause infinite loop */ }
而凡尔赛永远不会进入这个循环。sox=4;这是遥不可及的。whiletrue又是一个无限循环。

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


而您的示例中的True结果将导致无限,因此您可能希望出现编译时错误。然而,你可能有一个突破,在循环退出它,使之合法!或者,在某些情况下,您可能还需要实际的无限循环,例如守护进程。这就是为什么在本例中没有错误。

稍微调整了代码,使其完全正确!谢谢你们的回答。。我的想法是错误的,因为False将导致无限循环。非常感谢@S.L.Barth从数学角度来看待这个问题。人们不加评论地否决某些东西是很糟糕的:-
while(true){ /* this will cause infinite loop */ }