Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » К. Арнольд, Д. Гослинг - Язык программирования Java

К. Арнольд, Д. Гослинг - Язык программирования Java, страница 61

PDF-файл К. Арнольд, Д. Гослинг - Язык программирования Java, страница 61 Языки программирования (53641): Книга - 7 семестрК. Арнольд, Д. Гослинг - Язык программирования Java: Языки программирования - PDF, страница 61 (53641) - СтудИзба2019-09-19СтудИзба

Описание файла

PDF-файл из архива "К. Арнольд, Д. Гослинг - Язык программирования Java", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 61 страницы из PDF

Во время конструирования объекта нет никакого способа перехватить и обработать исключение. Приинициализации полей выход заключается в том, чтобы инициализировать их внутри конструктора, который может возбуждать исключения. Длястатических инициализаторов можно поместить инициализацию в статический блок, который бы перехватывал и обрабатывал исключение.Статические блоки не возбуждают исключений, но могут перехватывать их.Java довольно строго подходит к обработке проверяемых исключений, поскольку это помогает избежать программных сбоев, вызванныхневниманием к ошибкам. Опыт показывает, что программисты забывают про обработку ошибок или откладывают ее на будущее, которое такникогда и не наступает. Условие throws ясно показывает, какие исключения возбуждаются методом, и обеспечивает их обработку.При вызове метода, у которого в условии throws приведено проверяемое исключение, имеются три варианта:●●●Перехватить исключение и обработать его.Перехватить исключение и перенаправить его в обработчик одного из ваших исключений, для чего возбудить исключение типа,объявленного в вашем условии throws.Объявить данное исключение в условии throws и отказаться от его обработки в вашем методе (хотя в нем может присутствовать условиеfinally, которое сначала выполнит некоторые завершающие действия; подробности приводятся ниже).При любом из этих вариантов вам необходимо перехватить исключение, возбужденное другим методом; это станет темой следующего раздела.Упражнение 7.1Создайте класс-исключение ObjectNotFoundException для класса Linked List, построенного нами в предыдущих упражнениях.

Включите в негометод find, предназначенный для поиска объектов в списке, который либо возвращает нужный объект LinkedList, либо возбуждает исключение,если объект отсутствует в списке. Почему такой вариант оказывается более предпочтительным, нежели возврат значения null для ненайденногообъекта? Какие данные должны входить в ObjectNotFoundException?7.4.

Операторы try, catch и finallyЧтобы перехватить исключение, необходимо поместить фрагмент программы в оператор try. Базовый синтаксис оператора try выглядитследующим образом:tryблокcatch (тип-исключения идентификатор)блокcatch (тип-исключения идентификатор)блок.....finallyблокТело оператора try выполняется вплоть до возбуждения исключения или до успешного завершения.

Если возникает исключение, то по порядкупросматриваются все условия catch, пока не будет найдено исключение нужного класса или одного из его суперклассов. Если подходящееусловие catch так и не найдено, то исключение выходит из текущего оператора try во внешний, который может обработать его. В операторе tryможет присутствовать любое количество условий catch, в том числе и ни одного. Если ни одно из условий catch внутри метода не перехватываетисключение, то оно передается в тот фрагмент программы, который вызвал данный метод.Если в try присутствует условие finally, то составляющие его операторы выполняются после того, как вся обработка внутри try будет завершена.Выполнение finally происходит независимо от того, как завершился оператор — нормально, в результате исключения или при выполненииуправляющего оператора типа return или break.В приводимом ниже примере осуществляется подготовка к обработке одного из исключений, возбуждаемых в replaceValue:try {attributedObj.replaceValue("Age", new Integer(8));} catch (NoSuchAttributeException e) {// так не должно быть, но если уж случилось - восстановитьAttr attr = new Attr(e.attrName, e.newValue);attrbuteObj.add(attr);}try содержит оператор (представляющий собой блок), который выполняет некоторые действия, в обычных условиях заканчивающиеся успешно.Если все идет нормально, то работа блока на этом завершается.

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

Кроме того, catch может сделать то, что сочтетнужным, и прекратить свою работу — в этом случае управление передается оператору, следующему за оператором try (после выполненияусловия finally, если оно имеется).Универсальное условие catch (например, перехватывающее исключения типа Exception) обычно говорит о плохо продуманной реализации,поскольку оно будет перехватывать все исключения, а не только то, которое нас интересует. Если воспользоваться подобным условием в своейпрограмме, то в результате при возникновении проблем с атрибутами будет обрабатываться, скажем, исключение ClassCastException.Условия catch в операторе try просматриваются поочередно, от первого к последнему, чтобы определить, может ли тип объекта-исключенияприсваиваться типу, объявленному в catch.

Когда будет найдено условие catch с подходящим типом, происходит выполнение его блока, причемидентификатору в заголовке catch присваивается ссылка на объект-исключение. Другие условия catch при этом не выполняются. С операторомtry может быть связано произвольное число условий catch, если каждое из них перехватывает новый тип исключения.Поскольку условия catch просматриваются поочередно, перехват исключения некоторого типа перед перехватом исключения расширенноготипа является ошибкой. Первое условие всегда будет перехватывать исключение, а второе — никогда. По этой причине размещение условияcatch для исключения-суперкласса перед условием для одного из его подклассов вызывает ошибку во время компиляции:class SuperException extends Exception { }class SubException extends SuperException { }class BadCatch {public void goodTry() {/* НЕДОПУСТИМЫЙ порядок перехвата исключений */try {throw new SubException();} catch (SuperException superRef) {// Перехватывает и SuperException, и SubException} catch (SubException subRef) {// Никогда не выполняется}}}В каждом операторе try обрабатывается только один исключительный случай.

Если catch или finally возбуждают новое исключение, то условияcatch данного try не рассматриваются повторно. Код в условиях catch и finally находится за пределами защиты оператора try. Разумеется,возникающие в них исключения могут быть обработаны любым внешним блоком try, для которого внутренние catch или finally являютсявложенными.7.4.1. Условие finallyУсловие finally оператора try позволяет выполнить некоторый фрагмент программы независимо от того, произошло исключение или нет. Обычноработа такого фрагмента сводится к “чистке” внутреннего состояния объекта или освобождению “необъектных” ресурсов (например, открытыхфайлов), хранящихся в локальных переменных. Приведем пример метода, который закрывает файл после завершения своей работы даже вслучае возникновения ошибки:public boolean searchFor(String file, String word)throws StreamException{Stream input = null;try {input = new Stream(file);while (!input.eof())if (input.next() == word)return true;return false;// поиск завершился неудачно} finally {if (input != null)input.close();}}Если создание объекта оператором new закончится неудачно, то input сохранит свое исходное значение null.

Если же выполнение new будетуспешным, то input будет содержать ссылку на объект, соответствующий открытому файлу. Во время выполнения условия finally поток inputбудет закрываться лишь в том случае, если он предварительно был открыт. Независимо от того, возникло ли исключение при работе с потокомили нет, условие finally обеспечивает закрытие файла; благодаря этому экономится такой ограниченный ресурс, как количество одновременнооткрытых файлов. Метод searchFor объявляет о том, что он возбуждает StreamException, чтобы все порожденные в нем исключения послевыполнения завершающих действий передавались в вызывающий фрагмент программы.Условие finally может также использоваться и для выполнения завершающих действий после операторов break, continue и return — вот почемуиногда можно встретить try без соответствующих ему catch.

При обработке любого оператора, передающего управление программы в другуюточку, выполняются все условия finally. Невозможно покинуть try-блок без выполнения его условия finally.В приведенном выше примере finally используется и для выполнения завершающих действий в случае нормального возврата по операторуreturn. Один из самых распространенных случаев использования goto в других языках — необходимость выполнения определенных действийпри завершении программного блока, как успешном, так и аварийном. В нашем примере finally обеспечивает закрытие файла и при выполненииоператора return, и при возбуждении исключения.У условия finally всегда имеется некоторая причина.

Она может состоять в нормальном завершении блока try, или в выполнении управляющегооператора наподобие return, или же в возбуждении исключения во фрагменте, заключенном в try-блок. Эта причина запоминается и при выходеиз блока finally. Тем не менее, если в блоке finally возникает новая причина выхода (скажем, выполняется управляющий оператор вроде break илиreturn или возбуждается исключение), то она отменяет старую, и о существовании последней забывается.

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