虽然在eclipse中找到 "死代码"线程,但这里 死代码警告
我尝试了以下简单的java代码:
public class Test2
{
public static void main(String[] args)
{
int x = 0;
while(false)
{
x=4;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这正确地抛出了编译时错误
C:\Documents and Settings\user\Desktop\Test2.java:7: unreachable
statement
{
^ 1 error
Run Code Online (Sandbox Code Playgroud)
我稍微调整了一下代码:
public class Test2
{
public static void main(String[] args)
{
int x =0;
while(true)
{
x=4;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它编译得很好.
有没有理由,为什么编译好?
逻辑上两者都应该导致infiniteloop并且都应该导致编译时错误.
难道我做错了什么?
逻辑上两者都应该导致infiniteloop
不完全:while(false)永远不会进入循环.
此外,编译器不会警告无限循环 - 您可能实际上需要一个:
while(true) {
// poll some queue for work
// if work found do it
// else sleep 1 second
}
Run Code Online (Sandbox Code Playgroud)
有没有理由,为什么编译好?
为什么不编译好?所有语句都可以访问,而不是第一个例子:-)
许多程序故意有无限循环.(想想服务器,例如,应该"永远"为客户服务.)拒绝编译无限循环是没有意义的.
逻辑上两者都应该导致无限循环,并且都应该导致编译时错误.
不,只有第二个应该导致无限循环.
一个while循环继续只要条件为真.因为false永远不会是真的,所以循环体将永远不会被执行(这就是为什么x = 4;在这种情况下无法访问).
请注意,如果你这样做......
public class Test2
{
public static void main(String[] args)
{
int x =0;
while(true)
{
x=4;
}
x = 4; <--------- unreachable!
}
}
Run Code Online (Sandbox Code Playgroud)
...它将无法编译,因为循环将永远持续,并且最后一个x = 4;将无法访问.
| 归档时间: |
|
| 查看次数: |
4324 次 |
| 最近记录: |