На этом шаге мы поговорим про перехват исключений
На прошлом шаге мы рассмотрели как генерировать исключения. Но этих знаний не достаточно. Нужно уметь перехватывать и обрабатывать исключения.
Если исключение возникает и нигде не перехватывается, то программа прекращает работу, выводя на консоль сообщение о типе исключения и содержимое стека вызовов функций (про него мы поговорим позднее).
Перехват исключений в Java осуществляется в блоке операторов try/catch. В простейшем случае этот блок имеет следующий вид:
try { код } catch (ТипИсключения e) { обработчик исключений данного типа }
Если фрагмент кода в блоке try генерирует исключение типа, указанного в заголовке блока catch, то происходит следующее:
Если код в блоке try не генерирует исключение, то программа пропускает блок catch. И наконец, если в блоке try генерируется исключение, отличного по типу, указанного в блоке catch, то выполнение программы немедленно прекращается.
В блоке try можно перехватить несколько исключений, обработав их по отдельности. Для каждого типа исключения следует предусмотреть свой блок catch следующим образом.
try { код } catch (ТипИсключения1 e) { обработчик исключений данного типа } catch (ТипИсключения2 e) { обработчик исключений данного типа } catch (ТипИсключения3 e) { обработчик исключений данного типа }
Объект исключения содержит сведения о нем. Для того чтобы получить дополнительные сведения об этом объекте из подробного сообщения об ошибке, достаточно сделать вызов e.getMessage(), для того чтобы получить конкретный тип объекта исключения, - вызов e.getClass().getName().
Начиная с версии Java SE7, разнотипные исключения можно перехватывать в одном и том же блоке catch. Сделать это можно следующим образом:
try { код } catch (ТипИсключения1 | ТипИсключения2 e) { обработчик исключений данного типа } catch (ТипИсключения3 e) { обработчик исключений данного типа } catch (ТипИсключения4 e) { обработчик исключений данного типа }
На следующем шаге мы поговорим про повторное генерирование исключений