Что такое unchecked исключение (runtime exception) в Java?

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

Ответ

Unchecked исключения (непроверяемые) — это исключения, унаследованные от RuntimeException. Компилятор не требует их явного объявления в throws или обработки в try-catch. Они обычно указывают на ошибки программиста или сбои в работе JVM.

Характеристики:

  • Не проверяются на этапе компиляции.
  • Наследуются от java.lang.RuntimeException.
  • Представляют ошибки логики: доступ по индексу за пределами массива (ArrayIndexOutOfBoundsException), обращение к null (NullPointerException), неверный аргумент (IllegalArgumentException).

Пример:

public class UncheckedExample {
    public int divide(int a, int b) {
        // ArithmeticException (деление на ноль) — unchecked.
        // Компилятор не заставит вас обработать этот случай.
        return a / b;
    }

    public static void main(String[] args) {
        UncheckedExample example = new UncheckedExample();
        example.divide(10, 0); // Выбросит ArithmeticException во время выполнения.
    }
}
Сравнение с checked исключениями: Критерий Checked исключения Unchecked исключения (Runtime)
Наследование От Exception (но не от RuntimeException) От RuntimeException
Обработка Обязательна (try-catch или throws) Не обязательна
Тип ошибки Внешние, recoverable (например, IOException) Внутренние, логические, часто unrecoverable

Best practice: Предотвращайте unchecked исключения с помощью валидации входных данных и соблюдения контрактов методов, а не полагайтесь на их обработку.