Какие исключения в Java не требуют обязательной обработки (unchecked)?

«Какие исключения в Java не требуют обязательной обработки (unchecked)?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java непроверяемые (unchecked) исключения не требуют обязательного объявления в throws или обработки в блоке try-catch. Они являются подклассами RuntimeException или Error.

Основные примеры RuntimeException:

  • NullPointerException – обращение к методу или полю null объекта.
  • ArrayIndexOutOfBoundsException – выход за границы массива.
  • IllegalArgumentException – передача недопустимого аргумента в метод.
  • IllegalStateException – вызов метода в недопустимом состоянии объекта.
  • ClassCastException – некорректное приведение типов.
  • ArithmeticException – арифметическая ошибка (например, деление на ноль).
  • UnsupportedOperationException – вызов неподдерживаемой операции.

Примеры Error (критические ошибки JVM):

  • OutOfMemoryError – недостаточно памяти в куче (Heap).
  • StackOverflowError – переполнение стека вызовов.
  • NoClassDefFoundError – JVM не может найти определение класса.

Пример кода, генерирующего unchecked-исключения:

// NullPointerException
String str = null;
int length = str.length();

// ArrayIndexOutOfBoundsException
int[] numbers = {1, 2, 3};
int value = numbers[5];

// ArithmeticException
int result = 10 / 0;

// ClassCastException
Object obj = "Hello";
Integer num = (Integer) obj;

Хотя эти исключения не требуют обязательной обработки, хорошей практикой является их предвосхищение и корректная обработка для повышения надежности приложения.