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

Исключительные ситуации

1.

Исключительные ситуации

2.

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

3.

Причины возникновения
исключительных ситуаций
Внутренняя ошибка виртуальной
машины
(нехватка памяти)
Внутренняя ошибка программы
(деление на 0)
Внешний фактор
(ошибка чтения данных с диска)

4.

Иерархия исключений
Throwable
Error
Exception
RuntimeException

5.

Методы класса Throwable
t.getMessage();
t.getCause();
t.printStackTrace();
t.printStackTrace(System.out);

6.

Способы обработки исключений
1. try
... catch ... finally
2. throws

7.

«Отказ» от исключения
void doit() {
Thread.sleep(2000);
}

8.

«Отказ» от исключения
void doit() throws
InterruptedException {
Thread.sleep(2000);
}

9.

«Отказ» от исключения
void doit() throws
InterruptedException,
IOException,
ParseException {
...
}

10.

«Отказ» от исключения
void doit() throws
FileNotFoundException,
UnsupportedEncodingException,
IOException {
...
}

11.

«Отказ» от исключения
void doit() throws
IOException {
...
}

12.

«Отказ» от исключения
void doit() throws
IOException {
...
}
// при наследовании метод не
// может добавлять новые
// исключения в раздел throws

13.

«Обработка» исключения
void doit() {
Thread.sleep(2000);
}

14.

«Обработка» исключения
void doit() {
try {
Thread.sleep(2000);
} catch(InterruptedException e) {
System.err.println(“Error”);
}
}

15.

«Обработка» исключения
try {
// 1
} catch(InterruptedException e) {
// 2
} catch(IOException e) {
// 3
} catch(ParseException e) {
// 4
}

16.

«Обработка» исключения
try {
...
} catch(FileNotFoundException e) {
} catch(IOException e) {
} catch(Exception e) {
} catch(Throwable e) {
}

17.

«Обработка» исключения
try {
...
} catch(Throwable e) {
System.out.println(“Ups”);
}

18.

«Обработка» и «отказ» от
исключения
void doit() throws
InterruptedException {
try {
// 1
} catch(IOException e) {
// 2
} catch(ParseException e) {
// 3
}
}

19.

«Обработка» исключения
try {
// 1
// 2 ОШИБКА
// 3
} catch(ParseException e) {
// 4
}

20.

«Обработка» исключения
try {
int x = y / z;
x++;
System.out.println(x);
} catch(ArithmeticException e) {
System.out.println(“ERROR”);
}

21.

«Обработка» исключения
int x;
try {
x = y / z;
} catch(ArithmeticException e) {
System.out.println(“ERROR”);
}
x++; // ОШИБКА КОМПИЛЯЦИИ
System.out.println(x);

22.

«Обработка» исключения
int x = 4;
try {
x = y / z;
} catch(ArithmeticException e) {
System.out.println(“ERROR”);
}
x++;
System.out.println(x);

23.

Блок finally
try {
// 1
// 2 – ОШИБКА
// 3
} catch(ArithmeticException e) {
// 4
} finally {
// 5
}
// 6

24.

Блок finally
try {
DataBase x = DataBase.open();
return x.readData();
} catch(DataBaseException e) {
return null;
}
x.close();

25.

Блок finally
try {
DataBase x = DataBase.open();
return x.readData();
} catch(DataBaseException e) {
return null;
} finally {
x.close();
}

26.

Блок finally
DataBase x = null;
try {
x = DataBase.open();
return x.readData();
} catch(DataBaseException e) {
return null;
} finally {
x.close();
}

27.

Вложенные блоки try
DataBase x = null;
try {
x = DataBase.open();
return x.readData();
} catch(DataBaseException e) {
return null;
} finally {
try {
x.close();
} catch(Exception e) {}
}

28.

«Пробрасывание» исключений
DataBase x = null;
try {
x = DataBase.open();
return x.writeData();
} catch(DataBaseException e) {
x.cancel();
throw e;
} finally {
x.close();
}

29.

«Пробрасывание» исключений
Data doit() throws DataBaseException {
DataBase x = null;
try {
x = DataBase.open();
return x.writeData();
} catch(DataBaseException e) {
x.cancel();
throw e;
} finally {
x.close();
}
}

30.

«Маскирование» исключений
Data doit() throws LogicException {
DataBase x = null;
try {
x = DataBase.open();
return x.writeData();
} catch(DataBaseException e) {
x.cancel();
throw new LogicException(e);
} finally {
x.close();
}
}

31.

Собственные исключения
public class IllegalSexException
extends IllegalArgumentException {
private String sex;
}

32.

Собственные исключения
if(“M”.equals(sex)) {
...
} else if(“W”.equals(sex)) {
...
} else {
throw
new IllegalSexException(sex);
}
English     Русский Правила