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

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

Ответ

Unchecked исключения (наследники RuntimeException) не требуют обязательной обработки в коде. С ними часто сталкиваются в работе:

  1. NullPointerException — самая частая проблема при работе с неинициализированными ссылками.

    String str = null;
    int length = str.length(); // NullPointerException
  2. IllegalArgumentException — передача недопустимого аргумента в метод.

    public void setAge(int age) {
        if (age < 0) {
            throw new IllegalArgumentException("Возраст не может быть отрицательным");
        }
        this.age = age;
    }
  3. IndexOutOfBoundsException / ArrayIndexOutOfBoundsException — обращение к несуществующему индексу массива или коллекции.

  4. ClassCastException — неудачное приведение типов во время выполнения.

    Object obj = "Some string";
    Integer num = (Integer) obj; // ClassCastException
  5. NumberFormatException — ошибка преобразования строки в число.

    int num = Integer.parseInt("123abc"); // NumberFormatException
  6. ConcurrentModificationException — изменение коллекции во время итерации по ней (кроме использования итератора).

Почему они unchecked? Эти исключения обычно указывают на ошибки программиста (баги), которые можно и нужно исправлять в коде, а не обрабатывать. Их проверка на этапе компиляции часто нецелесообразна.