Definition
NPE is a runtime exception that occurs when trying to use a null reference. The JVM throws this exception to protect against dereferencing null pointers, which could cause program crashes.
Common Causes
Basic Example
String name = null;
int length = name.length(); // NPE thrown here
Here, we're trying to call a method on a null reference. The variable name
contains no object, so we can't invoke length()
.
Nested Objects Example
class User {
Address address;
}
class Address {
String street;
}
User user = new User();
String street = user.address.street; // NPE: address is null
This shows how nested object access can fail. While user
exists, address
is null because we haven't initialized it.
Collection Example
List<String> items = null;
items.add("item"); // NPE
Collections should be initialized before use. Better to initialize as empty: List<String> items = new ArrayList<>();
Optional Usage Explained
Basic Optional Chaining
Optional<User> user = Optional.of(new User());
String street = user
.flatMap(User::getAddress) // Converts User to Optional<Address>
.map(Address::getStreet) // Converts Address to Optional<String>
.orElse("Unknown"); // Provides default if null
This replaces nested null checks with a fluent API. Each step safely handles potential nulls.
Map and Filter
Optional<String> upperStreet = Optional.ofNullable(user)
.filter(u -> u.getName() != null) // Only proceed if name exists
.map(User::getName) // Get the name
.map(String::toUpperCase); // Transform it
This shows how to transform values while handling nulls safely.
Default Values
String result = Optional.ofNullable(someString)
.orElse("default");
A clean way to provide fallback values instead of null checks.
Conditional Execution
Optional.ofNullable(user)
.ifPresent(u -> System.out.println(u.getName()));
Execute code only when the value exists, replacing if-not-null checks.
Top comments (0)