Spring Boot异常处理

Java空指针异常(NullPointerException)原因与解决方案

空指针异常是Java中最常见的运行时异常之一,通常发生在试图访问或操作一个未被正确初始化的对象(即对象为null)时。以下是其常见场景及解决方法:

一、常见场景与示例
  1. 对象未实例化直接使用
    未通过new创建对象实例,直接调用其方法或属性。

    // 错误示例
    List<String> list = null;
    list.add("test"); // 抛出NullPointerException [^3]
    
    // 正确写法
    List<String> list = new ArrayList<>();
    list.add("test");

    2.方法返回值为null未判空
    调用外部方法时,未处理可能的null返回值。

String str = getDataFromDB(); // 可能返回null
int length = str.length();    // 若str为null,抛出异常 

// 正确写法:添加判空逻辑
if (str != null) {
    int length = str.length();
}

        3.自动拆箱导致的空指针
        包装类对象为null时进行自动拆箱操作。 

Integer num = null;
int value = num; // 自动拆箱时抛出异常 [^3]

        4.数组未初始化或越界访问
        访问未初始化的数组或错误下标。

int[] arr = null;
int x = arr[0];      // 抛出NullPointerException [^4]

int[] arr2 = new int[3];
int y = arr2[5];     // 抛出ArrayIndexOutOfBoundsException

        5.框架中依赖注入失效
        Spring等框架中未正确注入Bean,导致Service/Dao层对象为null

@Controller
public class UserController {
    @Autowired
    private UserService userService; // 若注入失败,userService为null
    
    public void getUser() {
        userService.findUser();      // 抛出异常 [^5]
    }
}
二、通用解决方案
  1. 显式判空
    对可能为null的对象进行判空处理:

    if (obj != null) {
        obj.method();
    }

2.使用Optional类(Java 8+)
通过Optional避免显式判空:

Optional<String> optional = Optional.ofNullable(getData());
optional.ifPresent(str -> System.out.println(str.length()));

 3.初始化对象与默认值
对象声明时赋予默认值:

List<String> list = new ArrayList<>(); // 而非null

4.启用静态代码分析工具
使用IDE(如IntelliJ IDEA)或工具(如SpotBugs)检测潜在的null风险。

5.在关键位置添加日志,结合try-catch捕获异常:日志与异常处理

try {
    processData();
} catch (NullPointerException e) {
    log.error("空指针异常:", e);
}

6.捕获空指针异常(匹配程度更高的最先被捕获、@Order值越小就越先被捕获)

 7.总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值