5.4 Ключевое слово finally

5.4 Ключевое слово 'finally'


Иногда могут быть коды очистки, которые должны обязательно выполняться. Однако, всякий раз, когда происходит исключение, программа резко останавливается, и очищающийся код никогда не выполняется. Чтобы бороться с этим в Java реализуется блок 'finally'. Блок finally' гарантирует, что он позаботится о всей работе очистки, когда произойдёт исключение. Он используется вместе с блоком try. Блок 'finally' содержит утверждения либо возвратить ресурсы в систему либо напечатать сообщение.

Рассмотрим следующий фрагмент кода.
.      .       .
try {
doSomethingThatMightThrowAnException();
}

catch ( Exception e) {
.      .       .
}

finally {
cleanup();
}
.      .       .

Если метод 'doSomethingThatMightThrowAnException ()' выбрасывает исключение, то будет вызываться метод 'cleanup ()'. Даже если исключение не выброшено, метод 'cleanup ()' в блоке finally будет выполнен. Блок 'finally' является дополнительным. Этот блок помещается после последнего блока 'catch'. Управление обычно передаётся в блок 'finally' в любом случае.

Обратите внимание: Блок 'finally' гарантирует, выполнится ли или нет происходящее исключение. Пункт finally из блока try-catch будет всегда выполняться, независимо от состояния блока try-catch.

Рисунок 5.3 показывает потока блоков try, catch и finally.

Рисунок 5.3: Поток выполнения блоков try, catch и finally


Обратите внимание: Блок finally должен быть всегда связан с блоком try и не может существовать самостоятельно.

Код продемонстрированный в примере 2 показывает использование блока 'finally'. Здесь, блок 'finally' выполнен независимо от того, происходит ли исключение 'ArithmeticException' или нет.

Пример 2:
class FinallyDemo { String name; int nol,no2;
     FinallyDemo(String args[]) {
           try {
           name = new String ( Aptech Limited );
           nol = Integer.parselnt(args[0]);
           no2 = Integer.parselnt(args[1] ) ;
           System.out.println(name);
           System.out.println( Division Result is +no1/no2);
      }
     catch(ArithmeticException i) {
           System.out.println( Cannot Divide by zero );
     }
     finally {
           name = null; // clean up code
           System.out.println( Finally executed );

           }
     }
public static void main(String args []) {
new FinallyDemo(args);
     }
}

Рисунок 5.4 показывает вывод вышеупомянутого кода.


Рисунок 5.4 а: Вывод примера 2
(когда никакое исключение не выброшено)



Рисунок 5.4 b: Вывод примера 2
(когда исключение выброшено)


Рассмотрим другой пример.

Пример 3:
class DemonstrateException { static String s;
public static void main(String s[]) {
try{
System.out.println( A );
DemonstrateException.staticMethod();
System.out.println( В );
           }
catch(NullPointerException ne) {
System.out.println( Exception occured };
System.out.println( С );
           }
finally {
System.out.println( D );
           }
     }

static void staticMethod() {
System.out.println(s.length());
     }
}

Вывод показан на рисунке 5.5


Рисунок 5.5: Вывод примера 3

назад к оглавлению вперед

Rus. Open Source company, г. Саратов
ул. Орджоникидзе, 156, офис 203
тел: 8 (8452) 57-84-41
e-mail: info@rus_opensource.com

Главная | Обзоры | О разном
Карта сайта

Учебная литература:

Введение в Linux
Основы JAVA
Архивы

© 2013 opensourcerules.net