В каких случаях в Java возникает NullPointerException (NPE)?

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

Ответ

NullPointerException (NPE) — это исключение времени выполнения, которое возникает при попытке использовать ссылку, имеющую значение null, как если бы она ссылалась на реальный объект.

Типичные причины:

  1. Вызов метода у null-ссылки:
    String text = null;
    int length = text.length(); // NPE
  2. Доступ к полю или изменение поля null-объекта:
    User user = null;
    String name = user.name; // NPE
  3. Индексация null-массива:
    int[] numbers = null;
    int first = numbers[0]; // NPE
  4. Получение длины null-массива:
    String[] items = null;
    int count = items.length; // NPE
  5. Синхронизация на null-объекте:
    Object lock = null;
    synchronized(lock) { // NPE
        // ...
    }

Стратегии предотвращения:

  • Явные проверки: if (obj != null) { ... }
  • Использование Optional (Java 8+): Для явного обозначения возможного отсутствия значения.
  • Аннотации @Nullable и @NonNull: Например, из библиотек Lombok или JetBrains, для статического анализа.
  • Валидация входных параметров: Гарантировать контракты методов.
  • Использование Objects.requireNonNull(): Для быстрой проверки аргументов.

NPE — это ошибка программиста, указывающая на недостаточную проверку условий в коде.