Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Haulmont-презентации Java / Haulmont. java_se_3.1.ppt
Скачиваний:
39
Добавлен:
16.03.2015
Размер:
690.69 Кб
Скачать

Объявляемые и необъявляемые

исключения

11• Возможность добавления данных – это только один довод в пользу создания новых типов

исключений

Другой, не менее важный, связан с тем, что тип исключения как таковой – это неотъемлемая часть информации об ошибке, поскольку исключения «отлавливаются» в соответствии с их типами

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

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

throw

12Исключения выбрасываются (генерируются) инструкцией throw throw Выражение;

Выражение в результате вычисления должно приводиться к значению, допускающему присваивание переменным типа Throwable, или, проще говоря, обязано быть ссылкой на объект Throwable

Пример 2

public void replaceValue(String name, Object newValue) throws NoSuchAttributeException

{

Attr attr = find(name);

if (attr == null) throw new NoSuchAttributeException(name); attr.setValue(newValue);

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

throw

13Исключение может быть сгенерировано также косвенным образом при вызове метода, который способен его выбрасывать

При выбрасывании исключения выполнение инструкции или выражения, повинных в происшедшем, завершается аварийно

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

Если исключение остается необработанным, соответствующий поток вычислений останавливается, но предварительно предоставляется возможность каким-то образом обслужить исключение

Если исключение возникло, все действия, предусмотренные в программном коде после инструкции или выражения, вызвавших исключение, далее не выполняются

Следующим будет выполнен либо «завершающий» блок finally, либо блок catch, обрабатывающий исключение

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Синхронные и асинхронные

исключения

14Результатом работы инструкции throw служит синхронное исключение – то же самое происходит, например, при целочисленном делении на нуль: исключение возникает как непосредственный итог выполнения определенной инструкции, причем неважно, выбрасывается ли оно явно, командой throw, либо косвенно, исполняющей системой, обнаружившей факт деления на нуль

Асинхронное исключение может возникнуть внезапно, независимо от того, какая именно инструкция прикладной программы выполняется в данный момент

Асинхронные исключения проявляются в двух ситуациях

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Синхронные и асинхронные

исключения

15Первая связана с внутренними ошибками виртуальной машины Java – такие исключения считаются асинхронными, поскольку их появление провоцируется кодом виртуальной машины, а не инструкциями приложения

Ко второй группе причин возникновения асинхронных исключений относится использование устаревших и не рекомендованных для применения методов (например, Thread.stop)

Указанные методы предоставляют возможность генерирования асинхронных исключений различных категорий (объявляемых и необъявляемых) в любой момент на протяжении цикла выполнения конкретного потока вычислений

Подобные механизмы рискованны и опасны по своей внутренней природе, поэтому их применение в большинстве случаев не поощряется

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Предложение throws

16Объявляемые методом исключения указываются с помощью предложения throws в виде списка наименований типов исключений, разделяемых символом запятой

В списке должны присутствовать те объявляемые исключения, которые не обрабатываются в теле самого метода

Метод вправе выбрасывать исключения типов, производных от тех, которые объявлены в предложении throws – язык позволяет полиморфным образом использовать объекты производных типов в любом контексте, где предусмотрено задание объектов базового типа

Более того, метод способен генерировать исключения нескольких различных классов, производных от одного базового и при этом обнародовать в throws только один базовый класс

Следует, однако, иметь в виду, что при использовании такого подхода вы лишите программистов, которые будут обращаться к методу, ценной информации о том, какие именно исключения расширенных типов способен выбрасывать метод

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Предложение throws

17Часть контракта метода, определяемая предложением throws, строго проверяется – метод вправе выбрасывать исключения только тех типов, которые явно названы

Выбрасывание объявляемых исключений других типов – как непосредственное, с помощью инструкции throw, так и косвенное, вследствие обращения к другим методам, - запрещается

Если в объявлении метода вообще отсутствует предложение throws, это не значит, что не могут быть выброшены какие-либо исключения – речь идёт только о невозможности генерирования объявляемых исключений

Поскольку типы объявляемых исключений должны быть указаны в предложении throws, отсюда следует, что фрагмент кода, не принадлежащий объявлению метода с предложением throws (такой, как выражение инициализации поля или статический блок инициализации), не вправе выбрасывать такие исключения ни непосредственно, ни косвенно

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Предложение throws

18Вызывая метод, в определении которого содержится предложение throws с перечнем объявляемых исключений, вы получаете в своё распоряжение три возможные альтернативы дальнейших действий:

отловить исключения и обработать их

отловить исключения и вместо них сгенерировать исключения таких типов, которые указаны в вашем собственном предложении throws

объявить соответствующие исключения в собственном предложении throws и позволить им «пройти» через ваш код незамеченными

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Предложение throws

19При переопределении унаследованного метода или реализации метода абстрактного класса не позволяется задавать в предложении throws нового метода больше объявляемых исключений, чем в исходном методе

В объявление метода native может быть включено предложение throws, которое заставляет код, вызывающий метод, отлавливать или переопределять указанные объявляемые исключения

Однако реализация native-методов находится вне компетенции компилятора Java, который поэтому не в состоянии проверить, действительно ли код метода выбрасывает только те исключения, которые им объявлены

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

try, catch и finally

20

Исключения могут быть отловлены, если требуемый

фрагмент кода заключить в блок try, синтаксис которого

выглядит так: try {

Инструкции – тело блока

}catch (Тип исключения 1 идентификатор 1) { Инструкции – обработка исключения

}catch (Тип исключения 2 идентификатор 2) {

Инструкции – обработка исключения

} finally { Инструкции

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Соседние файлы в папке Haulmont-презентации Java