请看下面的while
Java 无限循环。它导致其下面的语句的编译时错误。
while(true) {
System.out.println("inside while");
}
System.out.println("while terminated"); //Unreachable statement - compiler-error.
以下相同的无限while
循环可正常工作,并且不会发出任何错误,其中我只是用布尔变量替换了条件。
boolean b=true;
while(b) {
System.out.println("inside while");
}
System.out.println("while terminated"); //No error here.
同样在第二种情况下,循环之后的语句显然不可访问,因为布尔变量b
为true,但编译器根本没有抱怨。为什么?
编辑:while
显然,以下版本的卡在无限循环中,但是即使if
循环中的条件始终存在false
,因此循环下面的语句也不会对该语句下的语句发出任何编译器错误,因此循环永远不会返回,并且可以由编译器在以下位置确定编译时本身。
while(true) {
if(false) {
break;
}
System.out.println("inside while");
}
System.out.println("while terminated"); //No error here.
while(true) {
if(false) { //if true then also
return; //Replacing return with break fixes the following error.
}
System.out.println("inside while");
}
System.out.println("while terminated"); //Compiler-error - unreachable statement.
while(true) {
if(true) {
System.out.println("inside if");
return;
}
System.out.println("inside while"); //No error here.
}
System.out.println("while terminated"); //Compiler-error - unreachable statement.
编辑: 有同样的事情if
和while
。
if(false) {
System.out.println("inside if"); //No error here.
}
while(false) {
System.out.println("inside while");
// Compiler's complain - unreachable statement.
}
while(true) {
if(true) {
System.out.println("inside if");
break;
}
System.out.println("inside while"); //No error here.
}
以下版本的while
也陷入无限循环。
while(true) {
try {
System.out.println("inside while");
return; //Replacing return with break makes no difference here.
} finally {
continue;
}
}
这是因为finally
即使return
语句在try
块本身中遇到之前也总是执行该块。
编译器可以轻松而明确地证明第一个表达式 始终会 导致无限循环,但第二个表达式则不那么容易。在您的玩具示例中,这很简单,但是如果:
编译器显然不会检查您的简单情况,因为它完全放弃了这条路。为什么?因为它
更难
被禁止规范。参见第14.21节:
(顺便说一下,我的编译器 确实 在声明变量时抱怨final
。)
问题内容: 我正在使用第三方库来处理大量数据集。该过程偶尔会陷入无限循环(或被阻塞- 不知道为什么并且无法进入代码)。我想在设定的时间后消除这个问题,然后继续处理下一个案件。一个简单的例子是: processData通常最多需要1秒。我想设置一个计时器,该计时器在10秒后杀死processData() 编辑我将不胜感激代码片段(我没有在使用Thread的过程中练习过)。执行器方法看起来很有用,但我
你好,有人能解释一下为什么这会形成一个无限循环吗?谢谢!
你好,有人能解释一下为什么这会形成一个无限循环吗。谢谢
问题内容: 作为继承这个帖子我运行到一个无限循环,导致我的电脑死机。或者,不是很好:它似乎导致Java窗口(JFrame)不断获得焦点/获得图标化和无限地规范化。因此, 请勿尝试按原样运行代码 。该程序不允许您关闭它,也不能通过任务管理器关闭它。 我已经给出了一个完整的代码示例,您可以运行它- 正如通常所建议的那样。由于它是实际程序的简化版本,因此某些代码似乎是多余的(尤其是中间的方法)。重要的方
我真的不知道这个问题。。。 如果数字不正确,块将捕获异常,当我输入-1或0时,它将捕获异常并要求我再次输入数字。。。但如果我键入类似asdasd的内容,它将运行一个无限循环。
问题内容: 我一直在使用React 16.7-alpha中的新钩子系统,并且当我正在处理的状态是对象或数组时陷入useEffect的无限循环中。 首先,我使用useState并使用一个空对象启动它,如下所示: 然后,在useEffect中,我再次使用setObj将其设置为空对象。作为第二个参数,我传递了[obj],希望如果对象的 内容 没有更改,它也不会更新。但是它一直在更新。我猜是因为不管内容如