Java程式員工作中遇到最多的錯誤就是空指針異常,無論你多麼細心,一不留神就從代碼的某個地方冒出NullPointerException,真是令人頭疼。 到底怎麼避免空指針異常?看完這篇文章,可以幫助你。 1. 對象設置預設值 Object obj = new Object(); String st ...
Java程式員工作中遇到最多的錯誤就是空指針異常,無論你多麼細心,一不留神就從代碼的某個地方冒出NullPointerException,真是令人頭疼。
到底怎麼避免空指針異常?看完這篇文章,可以幫助你。
1. 對象設置預設值
Object obj = new Object();
String str = "";
2. 字元串比較,常量放前面
if ("success".equals(status)) {
// doSomething()
}
3. 方法返回空集合
public List<User> getUsers() {
List<User> users = userService.selectList();
return users == null ? Collections.emptyList() : users;
}
4. 轉String,用valueOf()方法代替toString()
User user = null;
String str = String.valueOf(user);
valueOf()方法源碼是:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
5. 判空,用工具庫
apache commons是最強大的,也是使用最廣泛的工具類庫,用它就行了。
// 字元串判空
String str = null;
boolean isEmpty = StringUtils.isEmpty(str);
// 判空的時候,會自動忽略空白字元,比如空格、換行
boolean isBlank = StringUtils.isBlank(str);
// 集合判空
List<String> list = null;
boolean isEmpty = CollectionUtils.isEmpty(list);
6. 用註解幫你檢查
class User {
@NotNull
private Integer id;
@NotBlank
private String name;
}
7. 避免不必要的拆箱
// 下麵會拋異常
Integer id = null;
int newId = id;
8. 資料庫欄位要設置預設值
數值類型的欄位設置預設0,varchar類型欄位設置預設 '' 空串。
避免取出來使用的時候,還要進行判空。
9. 使用Java8的Optional
// 獲取用戶姓名,下麵的代碼,不會報異常
User user = null;
Optional<User> optUser = Optional.ofNullable(user);
String name = optUser.map(User::getName).orElse(null);
你覺得怎麼樣?還有哪些辦法能避免空指針異常?