О ваще

Я знаю finallyЦель состоит в том, чтобы гарантировать выполнение некоторых инструкций или кода очистки. Но какова разница в использовании finally или поставить код после блока catch.
Я имею в виду, приведите пример случая, когда вам нужно использовать finally потому что в противном случае код может не выполняться вообще.

5 ответов

Решение

Наконец, будет выполнено рассмотрение того, что происходит в блоке catch. Существует несколько случаев.

catch(Exception E)
{
    ...
    throw new OtherException(BetterMessage, E);
}

или же

catch { return null; }

или же

catch { SomeMethodThatWillThrowAnException(); }

Таким образом, даже если вы вернете или сгенерируете исключение для выхода из блока Catch, вы все равно будете выполнять блок finally, в то время как любой код просто после try-catch будет игнорироваться.

Наконец выполняется независимо от того, что.

Один пример

public void test() {
    try { 
       int x = 0;
       return;
    } catch(Exception ex) { 
       ex.printStackTrace();
    } finally { 
      System.out.println("Hello from finally");
    }  

    System.out.println("Hello from after catch");
}

В этом случае "Hello from after catch" не будет напечатано, а "Hello from finally" будет.

finally блок выполняется независимо от того, выброшено исключение или нет.

Ваш вопрос, в чем разница использования finally и поставить код после catch блок. Если выдается исключение, код после catch блок не будет выполнен. Если вы поместите код в finally Блок, это будет.

Наконец, блок будет стрелять, несмотря ни на что, даже если вы бросаете и ловите. Код, помещенный после перехвата, который не находится в блоке finally, может не выполняться, например, если перехват может привести к завершению процесса или к аварийному завершению приложения.

Может произойти исключение, которое вы не поймаете. finally Блок гарантирует выполнение кода внутри него, даже если генерируется непредвиденное исключение.

Другие вопросы по тегам