Книга: Основы программирования на Java

9.9. Оператор finally

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

Оглавление книги


Генерация: 0.749. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз