На этом шаге мы поговорим про блок finally
Когда в методе генерируется исключение, оставшиеся в нем операторы не выполняются. Если же в методе задействованы какие-нибудь локальные ресурсы, о которых известно лишь ему, то освободить их уже нельзя.
В Java для таких случаев существует блок finally. Код в блоке finally выполняется независимо от того, возникло исключение или нет. Для того чтобы понять как работает try - catch - finally обратимся к примеру:
ImputStream in = new FileInputStream(...); try { /*1*/ код /*2*/ } catch (IOException e) { /*3*/ Обработчик исключительной ситуации /*4*/ } finally { /*5*/ in.close(); } /*6*/
Рассмотрим возможные ситуации, которые возможны при выполнении такого кода.
Отметим, что блок finally можно использовать и без блока catch. Мы рекомендуем всегда использовать блок finally для освобождения используемых ресурсов.
Также настоятельно рекомендуем разделять блоки try/catch и try/finally. В этом случае код становится наиболее понятным. Рассмотрим следующий пример:
InputStream in = ...; try { try { код } finally { in.close(); } }catch (IOException e) { вывод сообщения об ошибке }
Здесь внутренний блок отвечает только за закрытие потока ввода, а внешний блок try сообщает об ошибке. Такой код не только более понятен, но и более функционален, так как ошибки выявляются и в блоке finally.
На следующем шаге мы рассмотрим исключения с ресурсами