2.95M
Категория: ПрограммированиеПрограммирование

Школа автоматизированного тестирования на Java

1.

Школа автоматизированного
тестирования на Java
Java. Исключения.
Гордеев Павел
ПАО Сбербанк

2.

В данной лекции Вы …
Узнаете, что такое исключение и исключительная ситуация
Научитесь отличать проверяемые и непроверяемые исключения
Узнаете, что такое стек вызова
Узнаете, как обрабатываются исключения в Java
Узнаете, какой синтаксис языка используется для обработки исключений,
и уметь его применять
Узнаете о лучших практиках, которые следует применять при обработке исключений

3.

Исключения
1

4.

Исключения
Проблемы
В процессе выполнения кода программы может произойти ошибочная ситуация (например, деление на ноль)
Некоторые ошибки являются критичными для продолжения выполнения, некоторые – нет
Хотелось бы иметь способ обработки ошибок

5.

Исключения
Причины возникновения ошибок
Ввод пользователем некорректных данных
Отказы и сбои оборудования
Нарушение ограничений, связанных с выполнением программного кода (например, null-pointer deference)
Другие

6.

Исключения
Зачем обрабатывать ошибки?
Надежность
Удобство эксплуатации
Безопасность

7.

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

8.

Исключения в Java
1

9.

Исключения в Java
Stack-вызова (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()-методе необходимо обработать данные исключения.
English     Русский Правила