考虑到以下代码,这里的确切回报是做什么的?我的意思是它使程序从哪个方法和循环退出?
void foo(){
try{
for (String a : myList){
while(true){
if (myBoolean)
return;
}
}
} catch (Exception e) {
}
}
答案 0 :(得分:1)
当myBoolean
为真时,它结束循环,以及正在进行的所有其他操作(无需考虑例外)并将控制权返回给任何名为foo()
的函数。
在您的使用return;
中,它指的是返回类型为void
的函数。由于没有任何东西可以返回,它只会停止该函数中所发生的一切。
编辑:
这里需要注意的一点是OP提到了try-catch
块。相反,如果有一个try-catch-finally
或try-finally
块,它会在返回之前首先点击最后一个块。在下面的代码段中,
虽然评估return
,但会打印Hit finally
。试一试:)
try {
if (0 == 0)
return;
} finally {
System.out.println("Hit finally");
}
为什么会这样?
finally
块是释放锁的位置。 必须命中以防止资源泄露,如果允许控制在不释放锁定的情况下离开同步区域,就会发生这种情况。
啊哈。有一种方法可以欺骗这个。看看这个无限循环。
while (true) {
try {
if (0 == 0)
return;
} finally {
continue;
}
}
我认为这对于这个问题已经足够了。我现在就停下来。
答案 1 :(得分:0)
return
将您带出该方法,即使该方法返回void,您也会在满足条件时返回原始调用者。
答案 2 :(得分:0)
当控件达到return
语句时,它将返回到调用者端而没有任何异常(因此它不会转到catch
阻止),
但是如果
finally
阻止的话,我会在上面添加更多信息 然后它必须通过finally
返回到来电者端 块(因为我们知道最后块总是在任何情况下执行)
答案 3 :(得分:0)
return
退出方法foo
。
如果要退出while
循环,请使用break
(将您带出最里面的循环)。
如果您想要突破for
循环,请使用标记的中断:
label:
for (String a : myList) {
...
break label;
答案 4 :(得分:0)
正如其他海报所说,当myBoolean
为真时,return
语句将导致foo()
方法结束,并控制返回调用foo()
的方法}。
为了扩展答案,break
和continue
也可以在循环中使用,具体取决于所需的行为。 break
语句将导致循环结束,并在循环后立即继续执行。
如果您想跳到循环的下一次迭代,可以使用continue
。