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