← Назад к вопросам
Какие наследники 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) и не должны перехватываться обычным приложением. Вот основные наследники:
- OutOfMemoryError — недостаточно памяти для создания нового объекта
- StackOverflowError — переполнение стека вызовов (обычно при бесконечной рекурсии)
- NoClassDefFoundError — класс не найден во время выполнения
- InternalError — внутренняя ошибка виртуальной машины
- 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");
}
}
}
Ключевые различия
| Характеристика | Exception | Error |
|---|---|---|
| Причина | Ошибки приложения | Ошибки JVM |
| Обработка | Должны обрабатываться | Не должны обрабатываться |
| Проверяемость | Могут быть проверяемыми | Всегда непроверяемые |
| Исправление | Код может восстановиться | Обычно критично |