开发过程中空指针异常如何规避?

文章介绍了在Java编程中避免空指针异常的一些最佳实践,包括常量放前面进行字符串比较,初始化对象时赋予默认值,返回空集合而不是null,使用断言确保程序安全性,利用Optional处理可能为空的对象,以及在日志记录中正确处理可能为空的变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、字符串比较,常量放前面

if(status.equals(SUCCESS)){ }

这个时候 status 可能为 null 造成空指针异常,应该把常量放前面,就能避免空指针异常。

if(SUCCESS.equals(status)){ }

这个应该在各种开发规范里面都会提到,也是最基础的。

2、初始化默认值

在对象初始化的时候给它一个默认值或者默认构造实现,如:

User user = new User(); String name = StringUtils.EMPTY;

3、返回空集合

在返回一个集合的话,默认会是 null,统一规范返回一个空集合。

举个 List 例子,如:

public List getUserList(){ List list = userMapper.gerUserList(); return list == null ? new ArrayList() : list; }

这样接收方就不用担心空指针异常了,也不会影响业务。

4、断言

断言是用来检查程序的安全性的,在使用之前进行检查条件,如果不符合条件就报异常,符合就继续。

Java 中自带的断言关键字:assert,如:

assert name == null : "名称不能为空";

输出:

Exception in thread "main" java.lang.AssertionError: 名称不正确

不过默认是不启动断言检查的,需要要带上 JVM 参数:-enableassertions 才能生效。

Java 中这个用的很少,建议使用 Spring 中的,更强大,更方便好用。

Spring中的用法:

Assert.notNull(name,"名称不能为空");

5、Optional

Optional 是 JDK 8 新增的新特性,再也不用 != null 来判断了,这个在一个对象里面的多个子对象连续判断的时候非常有用。

https://www.itwanger.com/life/2020/03/10/java-Optional.html

6、log日志

log日志时,变量可能出现为空的情况,一定要避免使用变量.toString()等一系列的方法,否则可能会出现空指针异常!如果有必要调用方法,就必须做好判空条件!

错误使用案例

log.info("applicationIds:{}",applicationIds.toString());

log.info("员工:{} 所属应用Id集合:{} 集合Size:{}", account,applicationIds,applicationIds.size());

正确使用案例

log.info("applicationIds:{}",applicationIds);

if(applicationIds!=null){

log.info("所属应用Id集合:{} 集合Size:{}",applicationIds,applicationIds.size());

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忧郁的叮当猫

Thanks♪(・ω・)ノ

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值