美文网首页
日拱一卒:Java 空指针 NullPointerExcepti

日拱一卒:Java 空指针 NullPointerExcepti

作者: Tinyspot | 来源:发表于2023-11-16 09:24 被阅读0次

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)) {

    }
}

相关文章

网友评论

      本文标题:日拱一卒:Java 空指针 NullPointerExcepti

      本文链接:https://www.haomeiwen.com/subject/xpmewdtx.html