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.