Главная » Просмотр файлов » Г. Шилдт - С#4.0 Полное руководство

Г. Шилдт - С#4.0 Полное руководство (1160795), страница 77

Файл №1160795 Г. Шилдт - С#4.0 Полное руководство (Г. Шилдт - С#4.0 Полное руководство) 77 страницаГ. Шилдт - С#4.0 Полное руководство (1160795) страница 772019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 77)

Подходящий элемент не найден. Как следует из приведенного вьппе результата, каждый оператор сасс)т реагирует только на свой тип исключения. Вообще говоря, операторы басс)т выполняются по порядку их следования в программе. Но при этом выполнлется только один блок сасс)т, в котором тип исключения совпадает с типом генерируемого исключения. А все остальные блоки сасс]т пропускаются.

Перехват всех исключений Время от времени возникает потребность в перехвате всех исключений независимо от их типа. Для этой цели служит оператор сасс)т, в котором тип и переменная исключения не указываются. Ниже приведена общая форма такого оператора. сагой обработка исключений ) С помощью такой формы создается "универсальный" обработчик всех исключений, перехватываемых в программе. Ниже приведен пример такого "универсального" обработчика исключений. Обратите внимание на то, что он перехватывает и обрабатывает оба исключения, 1пг(ехопСОГЕапдеЕхсербьоп и ШУ14(енузегоЕхсерб1оп, генерируемых в программе. Использовать "универсальный" обработчик исключений.

озьпэ Бузпею; с1авв Ехсоепю5 ( всастс чоьб Маьп () ( // Эдесь массив помет длиннее массива белою. 1пг() п1лпег = ( 4, 8, !6, 32, 64, 128, 256, 512 ); тпт[] белою = ( 2, О, 4, 4, О, 8 )," ГОГ(1ПС 1=01 1 < ПЦЮЕГ.ЬЕПЧС)п 1++) ( сгу Сопво1е.нгтте11пе(пцюег(1] + " / Сепою(1] + " равно пцщег[1]/с)епою[1)); ) сассь ( // "универсальный" перехват. Сопво1е.нгттет ьпе("возникла некоторая исключительная ситуация."); ) ) При выполнении этой программы получается следующий результат. 4 / 2 равно 2 Возникла некоторая исключительная ситуация. Глава 13.

Обработка исключительных ситуаций 413 16 / 4 равно 4 32 ) 4 равно 8 Возникла некоторая иаключительная ситуация. 128 / 8 равно 16 Возникла некотерая исключительная ситуация. Возникла некоторая исключительная ситуация. Применяя "универсальный" перехват, следует иметь в виду, что его блок должен располагаться последним по порядку среди всех блоков баса(т.

Г)РИМЕЧАНИЕ В подавляющем большинстве случаев "универсальный" обработчик исключений не применяется. Как правило, исключения, которые могут быть сгенерированы в коде, обрабатываются по отдельности. Неправильное использование "универсального" обработчика может привести к тому, что ошибки, перехватывавшиеся при тестировании программы, маскируются.

Кроме того, организовать надлежащую обработку всех исключительных ситуаций в одном обработчике не так-то просто. Иными словами, "универсальный" обработчик исключений может оказаться пригодным лишь в особых случаях, например в инструментальном средстве анализа кода во время выполнения. Вложение блоков ~гу Один блок агу может быть вложен в другой. Исключение, генерируемое во внутреннем блоке агу и не перехваченное в соответствующем блоке с асс)г, передается во внешний блок ь ту. В качестве примера ниже приведена программа, в которой исключение 1пбехо ос06напдеЕхсерсьоп перехватывается не во внутреннем, а во внешнем блоке агу.

Использовать вложенный блок агу. цвгпд Бузгешг с1авз Невттгув ( ваат1а чоьб Маьп() ( Здеаь масаив пцшег длиннее массива белою. гпа[) пышет = ( 4, 8, 16, 32, 64, 128, 256, 512 гпа[) белою = ( 2, О, 4, 4, О, 8 ); Ггу ( // внешний блок Ггу бог(1пг 1=0; 1 < пожег.Ьепдг)и 1ь+) ( Ггу ( // вложенный блок Ггу Сопво1е.нгьсеьтпе(пцшег[г) + " / бепош(1) + " равно пышет(г)/бепош(г))г ) пасок (Огч1беВузегоЕхсера1оп) ( Сопво1е.игггеьгпе(Вцепить на нуль нельзя!" ); ) 414 Часть (. Язык С(г сакс)г (1пбехоосогнапдеехсергьоп) ( Сопво1е.игьгеььпе("Подходящий элемент не найден."); Сопво1е.игьсеььпе("Неисправимая ошибка — программа прервана.") ) Выполнение этой программы приводит к следующему результату. 4 2 2 равно 2 Делить на нуль нельзя! 16 2 4 равно 4 32 2 4 равно 8 Делить на нуль нельзя! 128 У 8 равно 16 Подходящий элемент не найден.

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

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

Но исключение может быть сгенерировано и вручную с помощью оператора с)ггои. Ниже приведена общая форма такого генерирования: Сьгон ехсергОЬ; где в качестве ехсерсс)Ь должен быть обозначен объект класса исключений, производного от класса Ехсерсйоп. Ниже приведен пример программы, в которой демонстрируется применение оператора с)ггои для генерирования исключения Р1чйг(еВузегоехсерс1оп. Сгенерировать исключение вручную.

овгпэ Зувгешг с1авв ТпгонОешо ( всагвс чо1б Маьп() ( сгу ( Глава 13. Обрабстка исключительных ситуаций 415 Сопво1е.игггеъьпе ("До генерирования исключения. "); Спгон пен Огч1оеВузеговхсерпгоп () 1 саго)1 (Огч18еВузегоЕхсергьоп) ( Сопво1е.яг1геъ1пе("Исключение перехвачено."); ) Сопво1е.иг1геЬгпе("После пары операторов агу/сагсь.") ) ) Вот к какому результату приводит выполнение этой программы. До генерирования исключения.

Исключение перехвачено. После пары операторов Сгу/саес)г. Обратите внимание на то, что исключение Р1ч14)енузегоЕхсерг1оп было сгенерировано с использованием ключевого слова пеи в операторе с)ггоы. Не следует забывать, что в данном случае генерируется конкретный объект, а следовательно, он должен быть создан перед генерированием исключения.

Это означает, что сгенерировать исключение только по его типу нельзя. В данном примере для создания объекта П1ч1г)енузегоЕхсерс1оп был автоматически вызван конструктор, используемый по умолчанию, хотя для генерирования исключений доступны и другие конструкторы. Повторное генерирование исключений Исключение, перехваченное в одном блоке пасс) ь может быль повторно сгенерировано в другом блоке, чтобы быть перехваченным во внешнем блоке сасс)ь Наиболее вероятной причиной для повторного генерирования исключения служит предоставление доступа к исключению нескольким обработчикам.

Допустим, что один обработчик оперирует каким-нибудь одним аспектом исключения, а другой обработчик — другим его аспектом. Для повторного генерирования исключения достаточно указать оператор спгон без сопутствующего выражения, как в приведенной ниже форме. Спгон Не следует, однако, забывать, что когда исключение генерируется повторно, то оно не перехватывается снова тем же самым блоком сасс)ь а передается во внешний блок сасс(ь В приведенном ниже примере программы демонстрируется повторное генерирование исключения. В данном случае генерируется исключение Хпс(ехОпСОЕЕапдеЕхсерг1оп. // Сгенерировать исключение повторно. пв1по Бувгею) с1авв Вегпгон ( ри511с вгаг1с чогс) ОепЕхсерггоп() ( // Здесь массив ппюег длиннее массива г)епою.

гпг(] ппюег = ( 4, 8, 16, 32, 64, 128, 256, 512 ); 1пг() Сеною = ( 2, О, 4, 4, О, 8 )) Гог(гпс 1=0; 1<попел.Велдона; гь+) ( 416 часть (. язык С() сгу ( Сопво1е.игггеьгпе(ппшег(1] + " / белою(1) т " равно пошел(1]/бепош[г)); ) пасс)г [ОгчгбевузегоЕхсерсгоп) ( Сопво1е.иггсеь1пе("Делить на нуль нельзя!"); ) сасс)г (Хпбехоосотнапдекхсерггоп) ( Сопво1е.игтгеЬ1пе("Подходящий элемент не найден."); обгон; // сгенерировать исключение повторно ) ) с1авв Нес)тгонэещо ( всаг1с но16 ма1п() ( ггу ( НеГЬгон.бепкхсерсгоп(); ) сассб(гпбехосГОГНапдеЕхсерсгоп) ( перехватить исключение повторно Сопво1е.иг1сеьтпе("Неисправимая ошибка — программа прервана.") ) ) В этом примере программы ошибки из-за деления на нуль обрабатываются локально в методе еепехсерс1оп (), но ошибка выхода за границы массива генерируется повторно.

В данном случае исключение 1пс)ехопСОЕНапдеЕхсерг1оп обрабатывается в методе Магп () . Использование блока йпа11у Иногда требуется определить кодовый блок, который будет выполняться после выхода из блока сгу/сасс)г. В частности, исключительная ситуация может возникнуть в связи с ошибкой, приводящей к преждевременному возврату из текущего метода. Но в этом методе мог быть открыт файл, который нужно закрыть, или же установлено сетевое соединение, требующее разрывания. Подобные ситуации нередки в программировании, и поэтому для их разрешения в СФ предусмотрен удобный способ; воспользоваться блоком йпа11у.

Для того чтобы указать кодовый блок, который должен выполняться после блока с ту/ с асс)ь достаточно вставить блок йпа 11 у в конце последовательности операторов сгу/сасс)ь Ниже приведена общая форма совместного использования блоков ггу/ сасс)тийпа11у. сгу ( Блок кода, предназначенный для обработки ошибок. ) сагсЬ (Ехсертуре1 ехоб) Обработчик исключения типа Ехсертуре1. Глава 13. Обрабатка исю)ючительиых ситуаций 417 ) саосп (ЕхсерТуре2 ехОЬ) // Обработчик исключения типа ЕхсерТуре2. тапа11у ( // Код завершения обработки исключений.

Характеристики

Тип файла
DJVU-файл
Размер
7,66 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6374
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее