<< ПредыдущаяОглавлениеСледующая >>


9.9. Оператор finally

Иногда требуется гарантировать, что определенный участок кода будет выполняться независимо от того, какие исключения были возбуждены и перехвачены. Для создания такого участка кода используется оператор finally. Даже в тех случаях, когда в методе нет соответствующего возбужденному исключению раздела catch, блок finally будет выполнен до того, как управление перейдет к операторам, следующим за разделом try. У каждого раздела try должен быть, по крайней мере, или один раздел catch, или блок finally. Блок finally очень удобен для закрытия файлов и освобождения любых других ресурсов, захваченных для временного использования в начале выполнения метода. Ниже приведен пример класса с двумя методами, завершение которых происходит по разным причинам, но в обоих перед выходом выполняется код раздела finally.

class FinallyDemo {
static void procA() {
try {
          System.out.println("insideprocA");
           throw new RuntimeException("demo");
}
finally {
            System.out.println("procA's finally");
}
}

static void procB() {
try {
           System.out.println("insideprocB");
           return;
}
finally {
            System.out.println("procB's finally");
}
}

public static void main(String args[]) {
try {
            procA();
}
catch (Exception e) {}
procB();
}
}

В этом примере в методе procA из-за возбуждения исключения происходит преждевременный выход из блока try, но при выходе выполняется раздел finally. Другой метод ргосВ завершает работу выполнением стоящего в try- блоке оператора return, но и при этом перед выходом из метода выполняется программный код блока finally. Ниже приведен результат, полученный при выполнении этой программы.

С:\> java FinallyDemo
inside procA procA's finally
inside procB procB's finally

 



<< ПредыдущаяОглавлениеСледующая >>