69 lines
2.8 KiB
Markdown
69 lines
2.8 KiB
Markdown
## Проявление ошибок
|
|
- На этапе компиляции - проверяет компилятор
|
|
- синтаксические ошибки
|
|
- ошибки типов данных
|
|
- На этапе выполнения - возникают во время работы
|
|
- отсутствие ресурса
|
|
- ошибки данных
|
|
- логические ошибки
|
|
## Система исключений
|
|
- Специальный объект - исключение
|
|
- создается системой ([[JVM]]) или программой (`new`)
|
|
- выбрасывается (`throw`)
|
|
- требует обработки в коде
|
|
- `try` - код, где может возникнуть
|
|
- `catch` - код, отлавливающий исключение
|
|
- `finally` - код, завершающий обработку
|
|
## Иерархия классов исключений
|
|
|
|
![[Exceptions.png]]
|
|
## Unchecked
|
|
- Непроверяемое или неконтроллируемое исключение
|
|
- Компилятору все равно, обработано или нет
|
|
- Выбрасывается виртуальной машиной
|
|
- Класс `RuntimeException` и его потомки:
|
|
- Проблема в коде
|
|
- Можно обработать
|
|
- Класс `Error` и его потомки
|
|
- Критическая ошибка
|
|
- Можно обработать, но уже поздно
|
|
## Checked
|
|
- Проверяемое или контролируемое исключение
|
|
- Обычно явно выбрасывается в программе
|
|
- Вызывается внешними причинами
|
|
- Компилятор проверяет, что про него не забыли: catch or throw
|
|
- Если понятно, что делать - обработать
|
|
- Если нет - передать выше
|
|
## try-catch-finally
|
|
```Java
|
|
try {
|
|
// проблемный код
|
|
} catch (Exception e) {
|
|
// e - объект ошибки
|
|
} finally {
|
|
// всегда выполнится
|
|
}
|
|
```
|
|
> [!hint] Можно писать `IOException | MyException | ... e`
|
|
> Для игнора: `Exception _`
|
|
## Проброс исключения
|
|
Через ключевое слово `throws`
|
|
```Java
|
|
void method() throws Exception {
|
|
|
|
}
|
|
```
|
|
Исключение пробрасывается, пока не будет поймано, либо в `main`, а оттуда вылет с программы
|
|
P.S. можно писать как для checked, так и для unchecked
|
|
## try-with-resources
|
|
Автозакрытие ресурсов - интерфейс `AutoCloseable`
|
|
```Java
|
|
try (File f = open("name")) {
|
|
int x = f.readInt();
|
|
result = 1 / x;
|
|
calculate(result);
|
|
} catch (IOException e) {
|
|
// ...
|
|
}
|
|
// не надо писать finally для закрытия файла
|
|
``` |