Шаг 57.
Язык программирования Java.
Блок finally

На этом шаге мы поговорим про блок finally

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

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

ImputStream in = new FileInputStream(...);
try {
	/*1*/
	код
	/*2*/
} catch (IOException e) {
	/*3*/
	Обработчик исключительной ситуации
	/*4*/
} finally {
	/*5*/
	in.close();
}
/*6*/

Рассмотрим возможные ситуации, которые возможны при выполнении такого кода.

  1. Код не генерирует никаких исключений. В этом случае программа пройдет через контрольные точки 1, 2, 5 и 6.
  2. Код генерирует исключение, которое перехватывается в блоке catch. Возможны два случая. Если в блоке catch не генерируется повторно исключение, то в этом случае программа пройдет все контрольные точки, кроме 2. Если в блоке catch генерируется повторно исключение, то программа пройдет через - 1, 3 и 5.
  3. Код генерирует исключение, которое не обрабатывается в блоке catch. В этом случае программа пройдет контрольные точки 1 и 5.

Отметим, что блок finally можно использовать и без блока catch. Мы рекомендуем всегда использовать блок finally для освобождения используемых ресурсов.

Также настоятельно рекомендуем разделять блоки try/catch и try/finally. В этом случае код становится наиболее понятным. Рассмотрим следующий пример:

InputStream in = ...;
try {
	try {
		код
	} finally {
		in.close();
	}
}catch (IOException e) {
	вывод сообщения об ошибке
}

Здесь внутренний блок отвечает только за закрытие потока ввода, а внешний блок try сообщает об ошибке. Такой код не только более понятен, но и более функционален, так как ошибки выявляются и в блоке finally.

На следующем шаге мы рассмотрим исключения с ресурсами

Предыдущий шаг Содержание Следующий шаг