Когда myBoolean
верно, завершает цикл, и все остальное, что происходит (без исключений для рассмотрения) и возвращает управление к тому, что функция называется foo()
.
В вашем использовании return;
это относится к функциям, которые имеют тип возврата void
. Поскольку ничего не вернуть, он просто останавливает все, что происходило в этой функции.
EDIT:
Одна вещь, чтобы отметить здесь, что ОП затронул try-catch
блок. Если бы вместо этого существовал блок try-catch-finally
или try-finally
, он сначала ударил бы, что, наконец, блок перед возвратом. В приведенном ниже фрагменте , хотя оценивается return
, печатается Hit finally
. Попробуйте:
try {
if (0 == 0)
return;
} finally {
System.out.println("Hit finally");
}
Почему это происходит? Блок finally
- это блокировка. Он ДОЛЖЕН ударить, чтобы предотвратить утечку ресурсов, которые произойдут, если управление будет разрешено покинуть синхронизированную область, не отпуская блокировку.
Aha. Есть способ обмануть это тоже. Посмотрите на этот бесконечный цикл.
while (true) {
try {
if (0 == 0)
return;
} finally {
continue;
}
}
Я думаю, этого достаточно для этого вопроса. Я сейчас остановлюсь.
'return;' работает одинаково везде, кроме внутри лямбда. –