Добавил:
Rumpelstilzchen2018@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3-й семестр / Лекции / 5 - Презентация 2

.pdf
Скачиваний:
57
Добавлен:
25.12.2020
Размер:
1.13 Mб
Скачать

Центр дистанционного обучения

Исключения

Общие методы для всех классов исключений (унаследованы из

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