3-й семестр / Лекции / 5 - Презентация 2
.pdfЦентр дистанционного обучения
Исключения
Общие методы для всех классов исключений (унаследованы из
Throwable):
try {
...
} catch (ArithmeticException ex) {
String message = ex.getMessage(); // Сообщение об ошибке
// Печать стека вызовов на момент ошибки:
ex.printStackTrace();
}
online.mirea.ru
Центр дистанционного обучения
Исключения
Пример stack trace:
java.lang.ArithmeticException: / by zero
at Test.divide(Test.java:4)
at Test.main(Test.java:9)
online.mirea.ru
Центр дистанционного обучения
Исключения
Генерация исключений:
public static void divide(int x, int y) {
if (y == 0)
throw new IllegalArgumentException(“Делитель равен 0”);
return x / y;
}
•Создается объект класса, являющегося подклассом
Throwable
•Ключевое слово throw
online.mirea.ru
Центр дистанционного обучения
Исключения
Обычно классы исключений предоставляют следующие конструкторы:
IllegalArgumentException()
IllegalArgumentException(String message)
IllegalArgumentException(String message, Throwable cause) IllegalArgumentException(Throwable cause)
Параметр message – это то, что возвращает метод getMessage().
Параметр message желательно всегда задавать.
online.mirea.ru
Центр дистанционного обучения
Исключения
Цепочки исключений:
// Это плохой пример, так не надо писать!
public static int addAsString(String x, String y) {
int ix;
try {
ix = Integer.parseInt(x);
}catch (NumberFormatException ex) {
//Передаем в параметре cause причину ошибки – ex:
throw new IllegalArgumentException(“x – не число”, ex);
}
online.mirea.ru
Центр дистанционного обучения
Исключения
int iy;
try {
iy = Integer.parseInt(y);
}catch (NumberFormatException ex) {
//Передаем в параметре cause причину ошибки – ex:
throw new IllegalArgumentException(“y – не число”, ex);
}
return ix + iy;
}
online.mirea.ru
Центр дистанционного обучения
Исключения
public static void main(String[] args) {
try {
int sum = addAsString(“123”, “ABC”);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
Throwable cause = ex.getCause(); // Может быть null!
System.err.println(cause.toString());
}
}
online.mirea.ru
Центр дистанционного обучения
Исключения
java.lang.IllegalArgumentException: y - не число
at ru.mirea.ksp.example4.Test.addAsString(Test.java:16)
at ru.mirea.ksp.example4.Test.main(Test.java:23) Caused by: java.lang.NumberFormatException: For input string: "ABC"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770) at ru.mirea.ksp.example4.Test.addAsString(Test.java:14)
... 1 more
java.lang.NumberFormatException: For input string: "ABC"
Включает в себя как информацию об основном исключении
(IllegalArgumentException), так и его причине
(NumberFormatException). Информацию о причине исключения нужно по возможности сохранять.
online.mirea.ru
Центр дистанционного обучения
Исключения
ArithmeticException, IllegalArgumentException, NumberFormatException – все это подклассы RuntimeException:
так называемые unchecked exceptions (непроверяемые исключения).
Эти исключения можно ловить и генерировать в любом месте программы, компилятором это никак не контролируется.
online.mirea.ru
Центр дистанционного обучения
Исключения
Другие часто встречающиеся unchecked exceptions:
•
•
•
•
•
NullPointerException
ClassCastException
IndexOutOfBoundsException
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
online.mirea.ru