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 блок.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Блок попытки
Следующая страница: наконец Блок