Similar presentations:
Школа автоматизированного тестирования на Java
1.
Школа автоматизированноготестирования на Java
Java. Исключения.
Гордеев Павел
ПАО Сбербанк
2.
В данной лекции Вы …Узнаете, что такое исключение и исключительная ситуация
Научитесь отличать проверяемые и непроверяемые исключения
Узнаете, что такое стек вызова
Узнаете, как обрабатываются исключения в Java
Узнаете, какой синтаксис языка используется для обработки исключений,
и уметь его применять
Узнаете о лучших практиках, которые следует применять при обработке исключений
3.
Исключения1
4.
ИсключенияПроблемы
В процессе выполнения кода программы может произойти ошибочная ситуация (например, деление на ноль)
Некоторые ошибки являются критичными для продолжения выполнения, некоторые – нет
Хотелось бы иметь способ обработки ошибок
5.
ИсключенияПричины возникновения ошибок
Ввод пользователем некорректных данных
Отказы и сбои оборудования
Нарушение ограничений, связанных с выполнением программного кода (например, null-pointer deference)
Другие
6.
ИсключенияЗачем обрабатывать ошибки?
Надежность
Удобство эксплуатации
Безопасность
7.
ИсключенияЧто такое исключение?
Исключение – ситуация, когда дальнейшее выполнение метода или части программы невозможно
Исключение – абстракция, отражающая ошибку выполнения программного кода
8.
Исключения в Java1
9.
Исключения в JavaStack-вызова (callstack)
10.
Исключения в JavaЧто такое исключение?
Исключение – ситуация, когда дальнейшее выполнение метода или части программы невозможно
Исключение – абстракция, отражающая ошибку выполнения программного кода
Когда происходит ошибка, метод создает специальный объект и передает его системе выполнения.
Этот объект называется объектом исключения (или просто исключением).
Объект исключения содержит информацию о типе ошибке и состоянии программы на момент, когда ошибка
произошла.
Передачу объекта ошибки системе выполнения называют «выбрасыванием или бросанием» исключения.
11.
Исключения в JavaДелятся на
Проверяемые (checked)
Непроверяемые (unchecked)
12.
Исключения в JavaМетод, выбрасывающий проверяемое исключение
Должен обработать исключение
Должен объявить исключение в списке выбрасываемых исключений в сигнатуре
13.
Исключения в JavaОсобенности throws
В списке исключений должны присутствовать те проверяемые исключения,
которые не обрабатываются в теле самого метода
Метод вправе выбросить исключение типа, наследующего любой из
перечисленных в throws
Запрещено выбрасывать проверяемые исключения типов, не объявленных в
throws
Статические блоки инициализации и инициализирующие выражения не могу
выбрасывать исключения
Нестатические блоки инициализации могут выбрасывать исключения только тех
типов, которые указаны во всех throws всех конструкторов
14.
Исключения в JavaОбработка исключения
15.
throw-statementА как «выбросить» исключение?
throw СсылкаНаЭкземплярИсключения;
throw new ТипИсключения();
16.
Исключения в JavaОбработка исключения
17.
Обработка исключенийtry … catch
try {
// код, от которого мы ожидаем исключение
} catch (ТипИсключения1 name) {
// обработка исключения 1
} catch (ТипИсключения2 name) {
// обработка исключения 2
}
18.
Обработка исключенийtry … catch (multiple)
try {
// код, от которого мы ожидаем исключение
} catch (ТипИсключения1 | ТипИсключения2 name) {
// обработка исключения
}
https://docs.oracle.com/javase/8/docs/technotes/guides/language/catch-
19.
Обработка исключенийtry … finally
try {
// код, от которого мы ожидаем исключение
} finally {
// код, который надо выполнить
// в любом случае
}
20.
Обработка исключенийtry … catch … finally
try {
// код, от которого мы ожидаем исключение
} catch (ТипИсключения1 name) {
// обработка исключения 1
} catch (ТипИсключения2 name) {
// обработка исключения 2
} finally {
// код, который надо выполнить
// в любом случае
}
21.
Обработка исключенийtry-with-resources
try(
AutoCloseable resource1 = …;
AutoCloseable resource2 = …
){
// работа с ресурсами
}
Под ресурсом (resources) здесь понимается объект, который надо освободить
после завершения работы с ним
try-with-resources работает только с объектами, классы которых реализуют
java.lang.AutoCloseable
try-with-resources освобождает ресурсы при помощи вызова
java.lang.AutoCloseable#close
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
22.
Обработка исключенийОграничение
При переопределении методы вы вправе возбуждать только те исключения,
которые были описаны в методе базового класса
Конструктор класса-наследника не может обработать исключения выбрасываемые
конструктором базового класса
23.
Полезные методыМетоды класса Throwable
Throwable.getMessage()
Throwable.printStackTrace(…)
Throwable.getStackTrace()
24.
Цепочки исключенийЧто здесь не так?
try {
...
} catch(YourException e) {
throw new MyException();
}
25.
Цепочки исключенийУнифицированный подход к сохранению контекстной информации
try {
...
} catch(YourException cause) {
throw new MyException(cause);
}
26.
Цепочки исключенийУнифицированный подход к сохранению контекстной информации
Throwable.getCause()
Throwable(Throwable throwable)
Throwable(String message, Throwable throwable)
Throwable.initCause(Throwable throwable)
https://docs.oracle.com/javase/8/docs/technotes/guides/lang/chained-exceptions.htm
27.
Стандартная библиотекаЧасто используемые типы исключений
Исключение
Применение
IllegalArgumentException
Неверное значение аргумента метода
IllegalStateException
Неверное состояние объекта для вызова
метода
NullPointerException
null-значение там, где его быть не должно
IndexOutOfBoundsException
Индексный параметр за границами
допустимого диапазона
ConcurrentModificationException
Параллельное изменение объекта в случаях,
когда оно недопустимо
UnsupportedOperationException
Объект не поддерживает метод
28.
Реализация собственных классовисключений
Перед реализацией, ответьте на следующие вопросы
Для проверяемого исключения расширяйте Exception
Для непроверяемого RuntimeException
29.
Использование исключенийBest practices
Используйте проверяемые исключения для ситуаций, когда клиентский код может произвести какие-то
действия для обработки исключения, кроме логирования самого факта выброса исключения, в остальных
случаях - непроверямые
Не используйте проверяемые исключения без явной на то необходимости
Всегда документируйте все исключения, которые может выбросить ваш метод
Не используйте исключения для управления потоком выполнения
Избегайте использования Exception, RuntimeException, Throwable и Error напрямую
30.
Обработка исключенийBest practices
Не игнорируйте исключения
Обработка исключения != Логирование исключения
Сопровождайте свои исключения контекстом
Не обрабатывайте слишком широкую иерархию исключений (Throwable, Exception)
Сначала отлавливайте (catch) исключения конкретных типов, потом базовых
31.
Исключения в JavaДокументация
Документируйте выбрасываемые исключения @throws/@exception
32.
Вопросы?1
33.
Домашнее задание•-
Прочитать главу об исключениях в книге «Философия Java» Эккель Брюс
Прочитать главу об исключениях в книге «Java. Эффективное программирование» Блох Джошуа
Oracle Tutorials. Exceptions.
https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html
Java Language Specification. Exceptions.
https://docs.oracle.com/javase/specs/jls/se8/html/jls-11.html
Реализовать программу, проверяющую качество логина и пароля по следующим критериям:
логин должен содержать только латинские буквы, цифры, и знак подчеркивания
длина логина не может превышать 20 символов
пароль может содержать те же символы, что и логин, а также любые знаки препинания
минимальная длина пароля – 12 символов
максимальная длина пароля – 20 символов
-
В случае, если был введен неверный пароль, необходимо выбросить исключение
BadPasswordFormatException, если неверный логин – BadLoginFormatException.
Сообщение об исключении должно быть информативным.
Проверку реализовать в виде статического метода, вызываемого из метода main().
В main()-методе необходимо обработать данные исключения.