Spec-Zone .ru
спецификации, руководства, описания, API
|
Вы связываете обработчики исключений с a try
блок, обеспечивая один или больше catch
блоки непосредственно после try
блок. Никакой код не может быть между концом try
блок и начало первого catch
блок.
try { } catch (ExceptionType name) { } catch (ExceptionType name) { }
Каждый catch
блок является обработчиком исключений и обрабатывает тип исключения, обозначенного его параметром. Тип параметра, ExceptionType
, объявляет тип исключения, которое обработчик может обработать и должен быть именем class, который наследовался от Throwable
class. Обработчик может обратиться к исключению с name
.
catch
блок содержит код, который выполняется, если и когда обработчик исключений вызывается. Система времени выполнения вызывает обработчик исключений, когда обработчик является первым в стеке вызовов чей ExceptionType
соответствует тип выданного исключения. Система считает это соответствием, если брошенный объект может по закону быть присвоен параметру обработчика исключений.
Следующее является двумя обработчиками исключений для writeList
метод — один для двух типов проверенных исключений, которые могут быть выданы в пределах try
оператор:
try { } catch (FileNotFoundException e) { System.err.println("FileNotFoundException: " + e.getMessage()); throw new SampleException(e); } catch (IOException e) { System.err.println("Caught IOException: " + e.getMessage()); }
Оба обработчика печатают сообщение об ошибке. Второй обработчик не делает ничего иного. Ловя любого IOException
это не поймано первым обработчиком, он позволяет программе продолжать выполняться.
Первый обработчик, в дополнение к печати сообщения, выдает определяемое пользователем исключение. (Выдача исключений покрывается подробно позже в этой главе в, Как Бросить раздел Исключений.)
В этом примере, когда FileNotFoundException
пойман это вызывает определяемое пользователем вызванное исключение SampleException
быть брошенным. Вы могли бы хотеть сделать это, если Вы хотите, чтобы Ваша программа обработала исключение в этой ситуации в особенном методе.
Обработчики исключений могут сделать больше чем только сообщения об ошибках печати или остановить программу. Они могут сделать восстановление после ошибки, запросить пользователя принимать решение, или распространять ошибку до высокоуровневого обработчика, используя объединенные в цепочку исключения, как описано в Цепочечном разделе Исключений.
В Java SE 7 и позже, сингл catch
блок может обработать больше чем один тип исключения. Эта функция может уменьшить дублирование кода и уменьшить искушение поймать чрезмерно широкое исключение.
В catch
пункт, определите типы исключений, которые блок может обработать, и разделять каждый тип исключения вертикальной панелью (|
):
catch (IOException|SQLException ex) { logger.log(ex); throw ex; }
Отметьте: Если a catch
блокируйте обрабатывает больше чем один тип исключения, тогда catch
параметр неявно final
. В этом примере, catch
параметр ex
final
и поэтому невозможно присвоить значения этому в пределах catch
блок.