Скачиваний:
46
Добавлен:
15.09.2014
Размер:
877.06 Кб
Скачать

13.6. Блоки try

Исключения, которые генерируется в блоке try, обычно перехватываются обработчиком, описанным в блоке catch, следующем непосредственно за этим блоком try.

try {

}

catch ( ) {

За блоком try может не следовать ни одного блока catch, или может следовать несколько таких блоков. Если при выполнении блока try не ге­нерируется ни одно исключение, все обработчики исключений пропускаются и управление передается первому оператору после последнего обработчика.

13.7. Генерация исключений

Ключевое слово throw используется для того, чтобы указать, какое ис­ключение генерируется. Это называется генерацией исключения или возбуж­дением исключения. Обычно throw имеет один операнд (специальный случай без операндов мы обсудим отдельно). Операнд throw может быть любого типа. Если операнд является объектом, мы называем его объектом исключения. Вместо объекта может быть сгенерировано условное выражение (см. раз­дел 13.10). Можно также генерировать объекты, не предназначенные для обработки ошибок.

Где перехватывается исключение? После генерации исключение будет перехвачено ближайшим обработчиком исключений (ближайшим к блоку try, в котором было сгенерировано исключение), содержащим спецификацию со­ответствующего типа. Обработчики исключений для блока try перечисляются сразу после него.

В процессе генерации исключения создается и инициализируется вре­менная копия операнда throw. Этот временный объект затем инициализирует параметр в обработчике исключения. Временный объект уничтожается, когда завершается выполнение обработчика исключения и управление передается программе.

Замечание по технике программирования 13.5

Если необходимо передать информацию относительно ошибки, которая вызвала исключение, то такая информация может быть помещена в сгенерированный объект. Обработчик catch должен содержать в этом случае имя параметра, через который эта информация может быть принята.

Замечание по технике программирования 13.6

Может быть сгенерирован объект, не содержащий информацию для передачи; в этом случае обработчику достаточно простой информации о том, что сгенерировано исключение данного типа, чтобы правильно выполнить свою задачу.

714 Глава 13

Когда исключение сгенерировано, программное управление покидает те­кущий блок try и передается соответствующему обработчику catch (если он существует), расположенному после этого блока try. Возможно, что точка генерации расположена в глубоко вложенной области действия внутри блока try; управление все равно будет передано этому обработчику catch. Воз­можно также, что точка генерации расположена в глубоко вложенных вы­зовах функций; и в этом случае управление будет передано этому обра­ботчику catch.

Может оказаться, что сам блок try не содержит никаких проверок ошибок и не включает никаких операторов throw, но код, вызываемый из блока try, может, конечно, содержать контроль ошибок, в частности, в конструкторах. Например, код в блоке try может обрабатывать индексирование массива в объекте класса массив, в котором функция-элемент operator[] может быть перегружена генерацией исключения, связанного с ошибкой выхода индекса за допустимые пределы. Любое обращение к этой функции может сгенери­ровать исключение или вызвать другую функцию, которая тоже может сге­нерировать исключение.

Исключение может прервать выполнение программы, но это не обяза­тельно. Однако, выполнение блока, в котором сгенерировано исключение, завершается.

Типичная ошибка программирования 13.3

Исключение должно генерироваться только внутри блока try. Исключение сгенери­рованное вне блока try, вызывает обращение к terminate ^ прерыванию программы.