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
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode
This shows how to transform values while handling nulls safely.
Default Values
String result = Optional.ofNullable(someString)
.orElse("default");
Enter fullscreen mode Exit fullscreen mode
A clean way to provide fallback values instead of null checks.
Conditional Execution
Optional.ofNullable(user)
.ifPresent(u -> System.out.println(u.getName()));
Enter fullscreen mode Exit fullscreen mode
Execute code only when the value exists, replacing if-not-null checks.
暂无评论内容