← Назад к вопросам

Какие наследники Throwable не являются Exception

1.3 Junior🔥 161 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Наследники Throwable, которые не являются Exception

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

Иерархия Throwable

Throwable
├── Exception (проверяемые и непроверяемые исключения)
│   ├── IOException
│   ├── SQLException
│   ├── RuntimeException (непроверяемые исключения)
│   │   ├── NullPointerException
│   │   ├── ArrayIndexOutOfBoundsException
│   │   └── IllegalArgumentException
│   └── ...
└── Error (ошибки виртуальной машины)
    ├── OutOfMemoryError
    ├── StackOverflowError
    ├── VirtualMachineError
    │   ├── InternalError
    │   └── UnknownError
    └── LinkageError
        ├── ClassNotFoundException
        └── NoClassDefFoundError

Класс Error и его подклассы

Error — это базовый класс для ошибок, которые обычно вызваны сбоями в виртуальной машине Java (JVM) и не должны перехватываться обычным приложением. Вот основные наследники:

  1. OutOfMemoryError — недостаточно памяти для создания нового объекта
  2. StackOverflowError — переполнение стека вызовов (обычно при бесконечной рекурсии)
  3. NoClassDefFoundError — класс не найден во время выполнения
  4. InternalError — внутренняя ошибка виртуальной машины
  5. UnknownError — неизвестная серьёзная ошибка

Практический пример

public class ThrowableHierarchy {
    
    public static void demonstrateStackOverflow() {
        try {
            recursiveMethod();
        } catch (StackOverflowError e) {
            System.out.println("Перехвачена ошибка: " + e.getMessage());
        }
    }
    
    private static void recursiveMethod() {
        recursiveMethod();
    }
    
    public static void demonstrateOutOfMemory() {
        try {
            int[] huggeArray = new int[Integer.MAX_VALUE];
        } catch (OutOfMemoryError e) {
            System.out.println("Недостаточно памяти: " + e);
        }
    }
    
    public static void checkThrowableType(Throwable t) {
        if (t instanceof Exception) {
            System.out.println("Это Exception - можно обработать");
        } else if (t instanceof Error) {
            System.out.println("Это Error - критическая ошибка JVM");
        }
    }
}

Ключевые различия

ХарактеристикаExceptionError
ПричинаОшибки приложенияОшибки JVM
ОбработкаДолжны обрабатыватьсяНе должны обрабатываться
ПроверяемостьМогут быть проверяемымиВсегда непроверяемые
ИсправлениеКод может восстановитьсяОбычно критично
Какие наследники Throwable не являются Exception | PrepBro