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

2.8 KiB

Проявление ошибок

  • На этапе компиляции - проверяет компилятор
    • синтаксические ошибки
    • ошибки типов данных
  • На этапе выполнения - возникают во время работы
    • отсутствие ресурса
    • ошибки данных
    • логические ошибки

Система исключений

  • Специальный объект - исключение
    • создается системой (JVM) или программой (new)
    • выбрасывается (throw)
    • требует обработки в коде
      • try - код, где может возникнуть
      • catch - код, отлавливающий исключение
      • finally - код, завершающий обработку

Иерархия классов исключений

!Exceptions.png

Unchecked

  • Непроверяемое или неконтроллируемое исключение
  • Компилятору все равно, обработано или нет
  • Выбрасывается виртуальной машиной
  • Класс RuntimeException и его потомки:
    • Проблема в коде
    • Можно обработать
  • Класс Error и его потомки
    • Критическая ошибка
    • Можно обработать, но уже поздно

Checked

  • Проверяемое или контролируемое исключение
  • Обычно явно выбрасывается в программе
  • Вызывается внешними причинами
  • Компилятор проверяет, что про него не забыли: catch or throw
  • Если понятно, что делать - обработать
  • Если нет - передать выше

try-catch-finally

try {
	// проблемный код
} catch (Exception e) {
	// e - объект ошибки
} finally {
	// всегда выполнится
}

[!hint] Можно писать 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 для закрытия файла