空指针异常(NullPointerException)是Java开发中最常见的运行时异常之一,其根源在于试图访问或操作值为null的对象引用。尽管普遍,但通过良好的编码习惯可有效减少其发生。

空指针异常的本质
当一个变量值为null时,它表示一个未指向任何内存空间的对象引用。若此时调用该变量的方法或访问其属性,便会触发空指针异常。例如:

text
Object object = null;
String string = object.toString(); // 抛出 NullPointerException
http://qianniu.javastack.cn/18-12-12/46377586.jpg

从异常类结构看,空指针异常继承自RuntimeException,属于非受检异常,通常只有在程序运行时才会暴露,并可能导致流程中断。

五种常见场景与规避方案
场景一:字符串比较时将常量置于前方
不推荐写法:

text
if(status.equals(SUCCESS)){
}
推荐写法:

text
if(SUCCESS.equals(status)){
}
将已知非空常量放在前面可避免因status为null而导致的异常。

场景二:对象初始化时赋予默认值
在声明对象时即进行初始化,可减少后续使用时的空值风险。

text
User user = new User();
String name = StringUtils.EMPTY;
场景三:返回空集合而非null
方法返回集合类型时,应尽量返回空集合,避免调用方额外判空。

text
public List getUserList(){
List list = userMapper.getUserList();
return list == null ? new ArrayList() : list;
}
场景四:使用断言进行前置校验
Java原生支持assert关键字,但需JVM参数启用。Spring提供的Assert工具类更便捷。

text
Assert.notNull(name, “名称不能为空”);
场景五:利用Optional包装可能为空的对象
JDK 8引入的Optional类可优雅处理嵌套对象的空值判断,避免多层if判空。

掌握以上策略,可显著提升代码的健壮性。读者若有其他实用技巧,欢迎补充交流。