Что такое непроверяемое (unchecked) исключение в Java?

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

Ответ

Непроверяемое исключение (unchecked exception) — это исключение, класс которого является подклассом RuntimeException или Error. Компилятор не требует его обязательного объявления (через throws) или обработки (в блоке try-catch).

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

  • Не проверяются на этапе компиляции.
  • Указывают на ошибки, которые часто являются следствием логических ошибок в коде (баги).
  • Могут возникнуть в любом месте программы.

Распространенные примеры:

  • NullPointerException (обращение к null)
  • ArrayIndexOutOfBoundsException (выход за границы массива)
  • ArithmeticException (деление на ноль)
  • IllegalArgumentException (некорректный аргумент метода)
  • ClassCastException (ошибка приведения типа)

Пример:

public void processArray(int[] array, int index) {
    // Компилятор не заставит обработать возможные
    // ArrayIndexOutOfBoundsException или NullPointerException
    int value = array[index]; // Риск unchecked исключений
    System.out.println(value / 2); // Риск ArithmeticException
}

Когда использовать? Непроверяемые исключения следует применять для ошибок, которые программист может предотвратить проверкой кода (например, проверка null или границ массива). Их обработка часто является фатальной для текущей операции.