
- •Исключения
- •Цели занятия
- •Иерархия исключений
- •Объявляемые и необъявляемые
- •Объявляемые и необъявляемые
- •Объявляемые и необъявляемые
- •Объявляемые и необъявляемые
- •Объявляемые и необъявляемые
- •Объявляемые и необъявляемые
- •throw
- •throw
- •Синхронные и асинхронные
- •Синхронные и асинхронные
- •Предложение throws
- •Предложение throws
- •Предложение throws
- •Предложение throws
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •Литература

try, catch и finally
21Тело блока try выполняется до момента возникновения исключительной ситуации либо благополучного достижения конца кода блока
•Если в процессе работы выбрасывается исключение – либо непосредственно, командой throw, либо косвенно, при вызове какого-либо метода – работа блока try прекращается и система последовательно проверяет все предложения catch, пытаясь найти среди них то, тип которого допускает присваивание объекта выброшенного исключения
•Если искомое предложение catch найдено, ему в качестве аргумента передаётся объект исключения, после чего выполняется блок кода этого предложения
•Другим предложениям catch управление не передаётся
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

try, catch и finally
22Конструкция try может содержать любое количество предложений catch либо не содержать таковых вовсе, а каждое предложение catch способно отлавливать исключения различных типов
•Если соответствующее предложение catch не найдено, исключение передаётся последовательно во внешние блоки try, в которых может быть найден требуемый код catch
•Предложение catch чем-то напоминает «встроенный метод», обладающий единственным параметром типа исключения, подлежащего обработке
•Код catch способен выполнить некие восстановительные операции, выбросить собственное исключение, вручая полномочия по обработке ошибки внешнему коду, либо осуществить всё необходимое, а затем передать управление инструкции, следующей за try (после выполнения блока finally, если таковой имеется)
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

try, catch и finally
23Задание в предложении catch параметра, относящегося к общему типу исключений (таковому, например, как Exception) – это обычно не очень правильный выбор, поскольку такое предложение способно отлавливать любые исключения, а не только те, которые относятся к исключениям производных типов, рассматриваемым в конкретной ситуации
•Предложение catch, содержащее в качестве параметра один из базовых типов исключений, не может быть расположено перед теми catch, в которых заданы соответствующие производные типы
•Предложения catch просматриваются системой поочерёдно, поэтому размещение в начале последовательности тех из них, которые относятся к базовым типам, воспрепятствует передаче управления остальным
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

try, catch и finally
24 Пример 3
class SuperException extends Exception { // Базовый класс исключений
}
class SubException extends SuperException { // Производный класс исключений
}
class BadCatch {
public void goodTry() {
// Последовательность предложений catch неверна try {
throw new SubException();
}catch (SuperException superRef) {
//Ловит и SuperException, и SubException
}catch (SubException subRef) {
//Код недостижим
}
}}
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

try, catch и finally
25
Конкретный блок try в ходе выполнения может сгенерировать только одно исключение
•Если в предложениях catch или finally выбрасываются другие исключения, предложения catch текущей конструкции try заново не проверяются
•Но ничто не запрещает обрабатывать такие исключения с помощью вложенных конструкций try … catch…finally
•Если в конструкции try присутствует предложение finally, его код выполняется по завершении работы остальных фрагментов кода try
•Это происходит независимо от того, каким образом протекал процесс вычислений – успешно, с выбрасыванием исключения либо с передачей управления посредством команды return или break
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

try, catch и finally
26Обычно блок finally используется для осуществления операций очистки внутреннего состояния объекта или высвобождения ресурсов, не связанных со свободно распределяемой памятью, таких как, например, дескрипторы открытых файлов, хранимые в локальных переменных
•Предложения finally используются и в тех случаях, когда необходимо осуществить ряд завершающих операций после выполнения инструкций break, continue или return, - вот почему нередко применяются такие конструкции try, в которых отсутствуют предложения catch
•При передаче управления в блок finally предварительно сохраняется информация о причине окончания выполнения блока try – код был исчерпан естественным образом либо завершен принудительно с помощью одной из управляющих инструкций, таких как return, или сгенерированного исключения
•Эта информация восстанавливается в момент выхода из блока finally
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

try, catch и finally
27 • Если, однако, код finally обладает собственными полномочиями по передаче управления во внешний блок посредством инструкций break или return либо выбрасывания исключения, исходная причина «забывается» и замещается новой
Пример 4 try {
// Что-то происходит return 1;
} finally { return 2;
}
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |

Литература
28• Арнольд Кен, Гослинг Джеймс, Холмс Дэвид. Язык программирования Java. 3-е изд.: Пер. с
англ. – М.: Издательский дом «Вильямс», 2001. –
624с.: ил. ISBN 5-8459-0215-0 (рус.).
•Хорстманн Кей С., Корнелл Гари. Java`2. Библиотека профессионала, том 1. Основы. 8-е издание.: Пер. с англ. – М.: ООО «И.Д. Вильямс», 2008. – 816 с.: ил. ISBN 978-5-8459-1378-4 (рус.).
•Гаврилов А.В., Дегтярёва О.А., Лёзин И.А., Лёзина И.В. Учебное пособие по языку Java. Часть 1. Самара: Издательство СНЦ РАН, 2010. –
176с. - ISBN 978-5-93424-508-6
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |