Files
obsidian/Программирование на Java/Исключения/Система исключений.md
T
roma-dxunvrs 8fda05110c 07.09.26
2026-09-07 23:26:20 +03:00

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 для закрытия файла
```