Что такое NullPointerException (NPE) в программировании?

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

Ответ

NullPointerException (NPE) — это распространенное исключение времени выполнения (runtime exception) в языках вроде Java, C# или Kotlin. Оно возникает при попытке использовать ссылку на объект, которая имеет значение null (т.е. не указывает ни на какой объект в памяти).

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

  • Вызов метода у null-ссылки.
  • Обращение к полю или индексу элемента null-ссылки.
  • Синхронизация по null-объекту.

Пример на Java:

String text = null; // Ссылка инициализирована как null
System.out.println(text.length()); // Выбросится NullPointerException

Способы предотвращения NPE:

  1. Явная проверка на null:
    if (text != null) {
        System.out.println(text.length());
    }
  2. Использование Optional (Java 8+):
    Optional<String> optionalText = Optional.ofNullable(text);
    optionalText.ifPresent(t -> System.out.println(t.length()));
  3. Аннотации (@Nullable, @NonNull): Помогают статическим анализаторам кода и IDE предупреждать о потенциальных NPE.
  4. Идиомы языка: Использование безопасного вызова (?.) в Kotlin или условного доступа в C#.