Подтвердить что ты не робот

Остается ли прорыв только попытка/улов или окружающий цикл?

Если у меня есть блок try ... catch внутри цикла while, а там внутри catch, завершает ли выполнение программы цикл?

Как в:

while (!finished) {
    try {
        doStuff();
    } catch (Exception e) {
        break;
    }
}

Будет ли исключение в doStuff() выйти из цикла?

4b9b3361

Ответ 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.