Добавить в корзинуПозвонить
Найти в Дзене
Записки о Java

Исключения в Java

Исключения — это один из ключевых механизмов в Java, позволяющий элегантно обрабатывать ошибки и аварийные ситуации в программе. Без понимания исключений невозможно писать надёжный, безопасный и легко поддерживаемый код. В этой статье мы подробно разберём: Исключение (exception) — это объект, который сигнализирует о непредвиденной или ошибочной ситуации во время выполнения программы. Когда возникает исключительная ситуация (например, деление на ноль, отсутствие файла, выход за границы массива), JVM "бросает" (throws) объект исключения. Если это исключение не обработано, программа аварийно завершается с трассировкой стека (stack trace). Не ловите Error — это почти всегда означает, что JVM не в состоянии продолжать работу. Checked Exceptions (проверяемые исключения) Unchecked Exceptions (непроверяемые исключения) 1. try-catch — базовая конструкция 2. Несколько catch-блоков Порядок важен: сначала более специфичные исключения, потом общие (Exception — в конце). 3. finally — блок, который в
Оглавление
Рисунок: иерархия исключений в JAVA
Рисунок: иерархия исключений в JAVA

Введение

Исключения — это один из ключевых механизмов в Java, позволяющий элегантно обрабатывать ошибки и аварийные ситуации в программе. Без понимания исключений невозможно писать надёжный, безопасный и легко поддерживаемый код.

В этой статье мы подробно разберём:

  • Что такое исключения,
  • Какие бывают типы исключений,
  • Как их обрабатывать (try-catch-finally, try-with-resources),
  • Как создавать собственные исключения,
  • Лучшие практики и распространённые ошибки.

Что такое исключение?

Исключение (exception) — это объект, который сигнализирует о непредвиденной или ошибочной ситуации во время выполнения программы.

Когда возникает исключительная ситуация (например, деление на ноль, отсутствие файла, выход за границы массива), JVM "бросает" (throws) объект исключения. Если это исключение не обработано, программа аварийно завершается с трассировкой стека (stack trace).

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

1. Error — фатальные ошибки

  • Указывают на критические проблемы, которые программа не может и не должна пытаться обрабатывать.
  • Примеры: OutOfMemoryError, StackOverflowError, NoClassDefFoundError.

Не ловите Error — это почти всегда означает, что JVM не в состоянии продолжать работу.

2. Exception — обычные исключительные ситуации

Checked Exceptions (проверяемые исключения)

  • Должны быть явно обработаны или объявлены в сигнатуре метода с помощью throws.
  • Компилятор требует их обработки.
  • Примеры: IOException, SQLException, ClassNotFoundException.

Unchecked Exceptions (непроверяемые исключения)

  • Наследуются от RuntimeException.
  • Не требуют обязательной обработки.
  • Возникают из-за ошибок в логике программы.
  • Примеры: NullPointerException, ArrayIndexOutOfBoundsException, IllegalArgumentException.

Как обрабатываются исключения?

1. try-catch — базовая конструкция

Рисунок: листинг использования базовой конструкции try-catch
Рисунок: листинг использования базовой конструкции try-catch

2. Несколько catch-блоков

Рисунок: листинг использования нескольких блогов catch
Рисунок: листинг использования нескольких блогов catch

Порядок важен: сначала более специфичные исключения, потом общие (Exception — в конце).

3. finally — блок, который выполняется всегда

Рисунок: листинг использование блока finally
Рисунок: листинг использование блока finally

finally выполняется в любом случае: было ли исключение, поймано оно или нет.

4. try-with-resources — автоматическое управление ресурсами (Java 7+)

Рисунок: листинг использование блока try-with-resources
Рисунок: листинг использование блока try-with-resources

Ключевые слова: throw и throws

1. throw — выбросить исключение вручную

Рисунок: листинг использование throw
Рисунок: листинг использование throw

2. throws — объявление исключения в сигнатуре метода

Рисунок: использование throws
Рисунок: использование throws

Метод не обрабатывает IOException, а передаёт ответственность вызывающему коду.

Cоздание собственных исключений

Вы можете создавать свои исключения — это полезно для семантической ясности и структурирования ошибок.

1. Проверяемое исключение (checked)

Рисунок: листинг проверяемого исключения и его вызов
Рисунок: листинг проверяемого исключения и его вызов

2. Непроверяемое исключение (unchecked)

Рисунок: листинг непроверяемое исключение и его вызов
Рисунок: листинг непроверяемое исключение и его вызов

Заключение

Исключения — это не ошибка, а инструмент контроля потока выполнения при возникновении проблем. Понимание их работы позволяет:

  • Писать более надёжный код,
  • Легко отлаживать проблемы,
  • Создавать гибкие и читаемые API.

Главные принципы:

  • Обрабатывайте checked исключения.
  • Не игнорируйте catch.
  • Используйте try-with-resources.
  • Создавайте свои исключения для бизнес-логики.

Примеры, рассмотренные в статье, вы можете найти по адресу:

https://github.com/ShkrylAndrei/blog_yandex/tree/main/src/main/java/info/shkryl/useException