在循环中返回的确切做什么?

时间:2016-03-23 20:21:18

标签: java return

考虑到以下代码,这里的确切回报是做什么的?我的意思是它使程序从哪个方法和循环退出?

 void foo(){
    try{
        for (String a : myList){
           while(true){
               if (myBoolean)
                   return;
           }
        }
     } catch (Exception e) {
       }
 }

5 个答案:

答案 0 :(得分:1)

myBoolean为真时,它结束循环,以及正在进行的所有其他操作(无需考虑例外)并将控制权返回给任何名为foo()的函数。

在您的使用return;中,它指的是返回类型为void的函数。由于没有任何东西可以返回,它只会停止该函数中所发生的一切

编辑:

这里需要注意的一点是OP提到了try-catch块。相反,如果有一个try-catch-finallytry-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()的方法}。

为了扩展答案,breakcontinue也可以在循环中使用,具体取决于所需的行为。 break语句将导致循环结束,并在循环后立即继续执行。

如果您想跳到循环的下一次迭代,可以使用continue