1. java.lang.NullPointerException
NullPointerException 属于 UncheckedException 异常,无需显示捕获异常
public class NullPointerException extends RuntimeException {
private static final long serialVersionUID = 5162710183389028792L;
public NullPointerException() {
super();
}
public NullPointerException(String s) {
super(s);
}
}
2. 包装类NPE
空指针一般出现在对象未被初始化
@Data
public class UserDTO implements Serializable {
private static final long serialVersionUID = 5196056007908280999L;
private String name;
private Integer age;
private Integer status;
private Boolean isOwner;
}
2.1 Boolean 类型未初始化
@Test
public void test() {
UserDTO userDTO = new UserDTO();
if (userDTO.getIsOwner()) {
// java.lang.NullPointerException
}
}
分析:
new UserDTO()
初始化时,基本类型会被复制,引用类型为null
解决方式:
if (Boolean.TRUE.equals(userDTO.getIsOwner())) {
}
2.2 Integer 类型未初始化
@Test
public void test() {
UserDTO userDTO = new UserDTO();
if (userDTO.getStatus() == 0) {
// java.lang.NullPointerException
}
}
解决方式一:工具类 Objects
if (Objects.equals(userDTO.getStatus(), 0)) {
}
解决方式二:声明常量 USER_STATUS
public class JUCDemo {
private static Integer USER_STATUS = 0;
@Test
public void test() {
UserDTO userDTO = new UserDTO();
if (USER_STATUS.equals(userDTO.getStatus())) {
}
}
}
补充:
若是比较大小,不会报空指针 ``
3. 字符串NPE
@Test
public void test() {
UserDTO userDTO = new UserDTO();
if (userDTO.getName().equals("Tinyspot")) {
// java.lang.NullPointerException
}
}
解决方式:
@Test
public void test() {
UserDTO userDTO = new UserDTO();
// 方式一:常量放前面
if ("Tinyspot".equals(userDTO.getName())) {
}
// 方式二:工具类 Objects
if (Objects.equals(userDTO.getName(), "Tinyspot")) {
}
}
4. 判空
@Test
public void test() {
UserDTO userDTO = new UserDTO();
if (StringUtils.isEmpty(userDTO.getName())) {
}
List<UserDTO> userDTOS = null;
if (CollectionUtils.isEmpty(userDTOS)) {
}
Map<String, String> map = null;
if (MapUtils.isEmpty(map)) {
}
}
网友评论