Главная страница

обработка исключений. Atch может "ловить" любой тип данных, необязательно даже передавать переменную


Скачать 16.42 Kb.
НазваниеAtch может "ловить" любой тип данных, необязательно даже передавать переменную
Дата18.05.2019
Размер16.42 Kb.
Формат файлаdocx
Имя файлаобработка исключений.docx
ТипДокументы
#77631

1.Во время выполнения программы могут возникать ситуации, когда состояние внешних данных, устройств ввода-вывода или компьютерной системы в целом делает дальнейшие вычисления и работу программы в целом в соответствии с базовым алгоритмом невозможными или бессмысленными. Такие ситуации называются исключительными или просто исключениями.

2.

3.

4.

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

  2. Кроме того, текст сообщений об исключениях непонятный, особенно для обычного пользователя. Используя обработку, можно сделать сообщения более user-friendly.

  3. Если для устранения появления исключений использовать другие методы: условные операторы и т.д., то это загромождает код и уменьшает его понятность.

  4. Также при использовании обработки исключений можно сгруппировать возможные исключения и создать их иерархию

5.Try и catch – это отдельные блоки, код в которых заключается в фигурные скобки. Блоки следуют строго друг за другом, между ними ничего не должно быть. Оператор throw используется либо в Try блоке либо в функции, которая в нем вызывается.

6.Также называется защищенным блоком. Содержит код, в котором могут возникнуть исключения. Может содержать отдельные инструкции и функции в целом, как одну так и несколько. К нему могут относиться множество catch блоков, каждый из которых будет обрабатывать определенное исключение.

7.Блок перехвата и обработки исключения. Содержит инструкции, выполняемые при возникновении исключительных ситуаций. Основной смысл этих инструкций – корректная обработка исключительной ситуации. После окончания работы блока catch исключение считается обработанным, и управление передается на первую инструкцию, следующую за конструкцией try … catch. Catch может "ловить" любой тип данных, необязательно даже передавать переменную.

8.Первый формат используется, если нам надо указать тип перехватываемого исключения, но не нужно обрабатывать связанное с этим исключением значение (это достигается при использовании второго формата оператора catch). Наконец, третий формат оператора catch позволяет обработать все исключения. Троеточие в этом случае показывает, что будут пойманы все исключения. При таком подходе нельзя указать имя переменной. В случае, если "кидаются" данные нестандартного типа (экземпляры определенных вами классов, структур и т.д.), лучше "ловить" их по ссылке, иначе вся "кидаемая" переменная будет скопирована в стек вместо того, чтобы просто передать указатель на нее.

9.Гораздо более интересным является механизм создания собственных исключений. Для их возбуждения используется оператор throw.

Тип выражения, указанного в операторе throw, определяет тип исключительной ситуации, а значение может быть передано обработчику прерываний. Используется с любыми типами данных. Все инструкции, стоящие после этого оператора, не будут выполняться в случае возникновения исключения.

Обработка исключений, возбужденных оператором throw, идет по следующей схеме:

1. Создается статическая переменная со значением, заданным в операторе throw.

Она будет существовать до тех пор, пока исключение не будет обработано.

Если переменная-исключение является объектом класса, при ее создании работает конструктор копирования.

2. Завершается выполнение защищенного try-блока: раскручивается стек подпрограмм, вызываются деструкторы для тех объектов, время жизни которых истекает и т.д.

3. Выполняется поиск первого из catch-блоков, который пригоден для обработки созданного исключения.

Поиск ведется по следующим критериям:

— если тип, указанный в catch-блоке, совпадает с типом созданного исключения,

или является ссылкой на этот тип;

— класс, заданный в catch-блоке, является предком класса, заданного в throw,

и наследование выполнялось с ключом доступа public;

— указатель, заданный в операторе throw, может быть преобразован по стандартным правилам к указателю, заданному в catch-блоке.

— в операторе throw задано многоточие.

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

Из указанных правил поиска следует, что очень важен порядок расположения catch-блоков.

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


написать администратору сайта