> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-java/ierarkhiya-isklyuchenii.md).

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

В Java исключения организованы в иерархическую структуру классов. На вершине этой иерархии находится класс `Throwable`, который является суперклассом для всех исключений и ошибок в Java. Исключения и ошибки в Java образуют две ветви этой иерархии: ветвь исключений (`Exception`) и ветвь ошибок (`Error`).

1. **`Throwable`**:
   * Является корневым классом иерархии исключений и ошибок в Java.
   * Имеет два основных подкласса: `Exception` и `Error`.
2. **`Exception`**:
   * Представляет исключительные ситуации, с которыми может столкнуться программа во время выполнения.
   * Разделены на два типа: проверяемые исключения (checked exceptions) и непроверяемые исключения (unchecked exceptions).
   * Некоторые из наиболее часто используемых подклассов `Exception`:
     * `IOException`: Возникает, когда происходит ошибка ввода-вывода.
     * `SQLException`: Возникает, когда происходит ошибка доступа к базе данных.
     * `NullPointerException`: Возникает, когда программа пытается использовать ссылку на объект, у которого значение `null`.
3. **`Error`**:
   * Представляет ошибки, которые обычно выходят за пределы контроля программы и не рекомендуется их обрабатывать.
   * Часто связаны с проблемами внутри JVM или с окружением выполнения.
   * Примеры ошибок:
     * `OutOfMemoryError`: Возникает, когда виртуальная машина Java (JVM) исчерпывает память.
     * `StackOverflowError`: Возникает, когда стек вызовов переполнен.
4. **Пользовательские исключения**:
   * Вы также можете создавать свои собственные классы исключений, расширяя классы `Exception` или `RuntimeException`. Это позволяет вам определять собственные типы исключений для специфических ситуаций в вашем приложении.
