- •Исключения
- •Цели занятия
- •Иерархия исключений
- •Объявляемые и необъявляемые
- •Объявляемые и необъявляемые
- •Объявляемые и необъявляемые
- •Объявляемые и необъявляемые
- •Объявляемые и необъявляемые
- •Объявляемые и необъявляемые
- •throw
- •throw
- •Синхронные и асинхронные
- •Синхронные и асинхронные
- •Предложение throws
- •Предложение throws
- •Предложение throws
- •Предложение throws
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •try, catch и finally
- •Литература
Исключения
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Цели занятия
2 Изучить:
•Понятие исключения, иерархию исключений в Java
•Объявляемые и необъявляемые исключения
•Синхронные и асинхронные исключения
•Выбрасывание исключений
•Предложение throws
• try, catch и finally
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
|
|
Понятие исключения |
3 |
• |
Исключения – это объекты |
|
||
|
• |
Все типы исключений должны наследовать класс |
|
|
Throwable или один из классов, производных от него |
|
• |
Класс Throwable содержит поле типа String, |
|
|
предназначенное для хранения информации об |
|
|
исключении |
|
• |
Обычно новые типы исключений создаются на основе |
|
|
класса Exception, производного от Throwable |
|
• |
Исполняющая система способна выбрасывать объекты |
|
|
исключений двух основных семейств типов – производных |
|
|
от RuntimeException либо расширяющих класс ошибок |
|
|
Error |
|
• |
На практике выбор типа исключения, создаваемого |
|
|
разработчиком, основывается на архитектуре и логике |
программы, поэтому прикладные исключения могут быть наследниками как Exception, так и RuntimeException
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Иерархия исключений
4 |
Object |
|
|
|
|
|
Throwable |
|
Error |
Exception |
|
AbstractMethodError … |
RuntimeException |
|
Другие типы |
|
исключений |
|
|
|
IndexOutOfBoundsException |
… |
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Объявляемые и необъявляемые
исключения
5• Исключения типов Error свидетельствуют о весьма
серьёзных ошибках, которые не могут быть отловлены (либо допускают такую возможность в редких случаях и с немалым трудом), а их последствия, как правило, не поддаются преодолению
•С формальной точки зрения вполне допустимо расширять классы RuntimeException или Error с
целью создания собственных необъявляемых исключений, т.е. таких исключений, которые могут быть сгенерированы без предварительного объявления их в предложении throws
•Уместность наследования от того или иного класса исключений определяется исходя из логики объявляемых и необъявляемых исключений
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Объявляемые и необъявляемые
исключения
6 Примеры классов, наследующих от RuntimeException
•ArithmeticException extends RuntimeException
Возникла исключительная ситуация, связанная с
ошибкой при выполнении арифметического вычисления (например, с попыткой целочисленного деления на нуль)
•IndexOutOfBoundsException extends RuntimeException
Задано значение индекса массива или содержимого
строки типа String, не принадлежащее допустимому диапазону
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Объявляемые и необъявляемые
исключения
7Примеры классов, наследующих от Error
•AbstractMethodError extends IncompatibleClassChangeError
Вызван абстрактный метод класса, не содержащий реализации
•IncompatibleClassChangeError extends LinkageError
В процессе загрузки класса или интерфейса выявлено изменение, несовместимое с имеющейся информацией об этом типе (например, в период между моментами компиляции и запуска кода на выполнение из состава типа был удален метод, не относящийся к private)
• LinkageError extends Error
Исключения этого и производных типов свидетельствуют о том, что некоторый класс определенным образом зависит от других классов и условия такой зависимости не удовлетворены
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Объявляемые и необъявляемые
исключения
8• Большинство типов RuntimeException и Error поддерживает, самое меньшее, по два конструктора: первый не предусматривает задания параметров, а второй в качестве параметра принимает объект String с содержательным описанием природы ошибки
•Строка описания может быть получена с помощью метода getMessage()
•Говоря об исключениях, мы будем иметь в виду преимущественно объявляемые исключения
•В случае применения объявляемых исключений компилятор получает возможность проверить, действительно ли метод генерирует только те исключения, которые обнародованы в его объявлении
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Объявляемые и необъявляемые
исключения
9• Все исключения классов, наследующих Exception, относятся к категории объявляемых
•Исключения времени выполнения и объекты ошибок классов RuntimeException, Error и производных от них принадлежат к группе необъявляемых
исключений
•Объявляемые исключения служат для представления ситуаций, которые, несмотря на их «исключительный» характер, вполне предсказуемы, и поскольку они происходят, с ними необходимо уметь обращаться
•Необъявляемые исключения отражают события, которые связаны с ошибками в логике кода и поэтому не могут быть успешно преодолены во время выполнения программы
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
|
|
Объявляемые и необъявляемые |
|
10 |
|
исключения |
|
• |
Иногда бывает полезно иметь в своем распоряжении более |
||
|
|||
|
|
полную информацию о природе ошибки, не только ту |
|
|
|
единственную строку текста, которая предусмотрена классом |
|
|
|
Exception |
|
|
• |
В таких случаях класс Exception может быть расширен с |
|
|
|
добавлением недостающих элементов данных, которые |
|
|
|
обычно передаются конструктору в виде аргументов |
Пример 1
public class NoSuchAttributeException extends Exception { public String attrName;
public NoSuchAttributeException(String name) {
super (“Атрибут с именем \”” + name + “/” не найден“); attrName = name;
}
}
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |