Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Перехват исключений
Перехват исключений производится специальными обработчиками, которые содержатся в блоках catch. Блоков catch может быть расположено несколько. Формат блока catch. Каждый блок catch начинается со слова “catch”, затем тип ошибки, а затем необязательное имя. Если имя параметра не указано, то информацию, переданную из точки исключения вытащить будет невозможно. В большинстве случаев, нужен только тип исключения. Имя необязательно Обработчик исключения срабатывает только тогда, когда тип указанный в catch и тип сгенерированного объекта исключения соответствуют друг другу Соответствие типу: 1. Тип параметра в заголовке catch и тип реального сгенерированного объекта исключения полностью одинаковы 2. Когда тип параметра, указанного в catch, является открытым базовым классом для типа сгенерированного объекта 3. Когда параметр типа обработчик – это указатель на базовый класс относительно сгенерированного объекта также указатель на наследованный класс. 4. Когда обработчик задан в формате catch(…){} отлавливает все исключения При написании нескольких обработчиков, важен порядок их расположения. При исключительной ситуации производится последовательный поиск нужного обработчика, если какой-то из блоков catch отловит исключение, то все последующие блоки catch не выполняются. При удачной обработке управление переходит на первый оператор после всех блоков catch. Рекомендуют блоки catch размещать в таком порядке, что бы первыми шли наиболее специализированные типы а затем более универсальные. Блок catch (…) должен быть самым последним Достоинства обрабтчика catch(…) в том, что он гарантировано отловит любое исключение и программа не прервется. Недостаток в том, что мы не знаем ни типа исключения и не можем обратиться к объекту исключения Последовательно обработчиков catch напоминает блоки case внутри switch, однако имеются следующие отличия: · Каждый блок catch имеет собственную область действия, в отличии от switch, где она общая · Внутри catch нет необходимости использовать break · В каждом catch определяют свой собственный тип, который ожидается в обработчике. · Внутри обработчика не доступа к переменным, объявленным ранее или в блоке try.
Повторная генерация исключения
Оператор повторной генерации исключения “throw; ” Повторная генерация происходит внутри catch. объект исключения будет тот же самый catch(Except e), который пришел в этот обработчик
|