Остается ли прорыв только попытка/улов или окружающий цикл?
Если у меня есть блок try ... catch
внутри цикла while
, а там внутри catch
, завершает ли выполнение программы цикл?
Как в:
while (!finished) {
try {
doStuff();
} catch (Exception e) {
break;
}
}
Будет ли исключение в doStuff() выйти из цикла?
Ответы
Ответ 1
Да, будет. Самый простой способ узнать это попробовать.
public static void main(String[] args) {
int i=0;
while (i<10) {
System.out.println(i);
try {
if(i ==7){
throw new Exception();
}
i++;
} catch (Exception e) {
break;
}
}
System.out.println("out of loop");
}
Он напечатает
1
2
3
4
5
6
7
out of loop
Ответ 2
Оператор A break
всегда относится к самым внутренним while
, do
или switch
, независимо от других промежуточных утверждений. Однако есть один случай, когда break
не приведет к выходу цикла:
while (!finished) {
try {
doStuff();
} catch (Exception e) {
break;
} finally {
continue;
}
}
Здесь резкое завершение finally
является причиной внезапного завершения try
, а крутое завершение catch
теряется.
Ответ 3
Да, он сломает цикл.
Но почему бы и нет:
finished = true;
вместо
Ответ 4
Да. break
существует оператор loop и switch
.
Ответ 5
Да, это так. break выйти из цикла while.
Ответ 6
Будет ли исключение сделано в doStuff() выйти из цикла?
Шаг за шагом, вот что будет:
- Исключение выбрано в doStuff()
- Ваш обработчик "есть все исключения" поймает исключение.
- Оператор "break" оставит цикл while.