Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

NullPointerException

Возникает при обращении к методу или полю через ссылку, равную `null`.

Доступно с: Java 1.0

Синтаксис

public class NullPointerException extends RuntimeException

Примеры

Подробное сообщение показывает, что именно было null:

record User(String name, String email) {}
 
void main() {
    var user = new User("Anna", null);
    try {
        IO.println(user.email().length());
    } catch (NullPointerException e) {
        IO.println(e.getMessage());
    }
}

Результат:

Cannot invoke "String.length()" because the return value of "Main$User.email()" is null

Проверка заранее через Objects.requireNonNull():

void greet(String name) {
    Objects.requireNonNull(name, "name must not be null");
    IO.println("Hello, " + name);
}
 
void main() {
    greet("Oleg");
    try {
        greet(null);
    } catch (NullPointerException e) {
        IO.println(e.getMessage());
    }
}

Результат:

Hello, Oleg
name must not be null

Примечания

С Java 14 сообщение подробно описывает, какой вызов не удался и почему. Типичные причины: неинициализированное поле, результат Map.get() для отсутствующего ключа, распаковка null в int. Защита: проверки на null, Optional, getOrDefault(), Objects.requireNonNull() на входе метода.

См. также

  • Optional — Контейнер, в котором либо есть значение, либо его нет, — замена возврату `null`.
  • Optional.ofNullable() — Оборачивает значение, которое может быть `null`, в `Optional`.
  • Map.get() — Возвращает значение по ключу или `null`.
  • RuntimeException — Базовый класс непроверяемых исключений — ошибок в логике программы.

В учебнике

  • Что такое исключения — Исключения в Java — как программа сообщает об ошибке, как читать трассировку стека, частые исключения и иерархия Throwable.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.