空指针常见原因和解决办法

简介: 首先NullPointerException是RuntimeException的一个子类,这是运行时,在编译时期不会触发,所以这是最最最容易出现的线上bug;

首先NullPointerException是RuntimeException的一个子类,这是运行时,在编译时期不会触发,所以这是最最最容易出现的线上bug;

20210122111039181.jpg

容易出现空指针异常的场景


在调用对象方法时


比如处理字符串常用的replace方法,数组的length方法,map的size方法等等;

str.replace(…)

如果str为null,这里就直接空指针了

判断一个str是否等于"test",你直接str.equals(“test”)

还有像map.forEach()、list.stream() 、object.equals()、str.toString()…

类似的还有很多,太多了


在判断对象是否为空时


这个是最坑的,导致空指针的原因就是在调用对象方法时没有对对象判空,但是有些小伙伴往往就是在这个环节出问题,明明对象判空的目的就是避免空指针,好家伙,到头来这成了罪魁祸首

比如你在调用str.replace(…)时,意识到这里应该对str做判断,不为空才调用replace方法

于是你开开心心一脸自信

if(!str.isEmpty()){

str.replace(…)

}

或者

if(str.length()>0){

str.replace(…)

}

这么一套操作下来以为自己的代码天衣无缝,这破公司已经容不下我了

万万没想到从一个坑掉进了另一个坑

str.isEmpty()、str.length()自身也会造成空指针

嘤嘤嘤~~~


对象判空技巧


我就直接给出几个常用的

StringUtils.isNotBlank(str)

StringUtils.isNotEmpty(str)

object != null

太多了,这里不一一列举


总结和技巧


在调用对象方法前先判断对象是否为空(不管是实体、变量、常量、map、list还是其他什么)

在判断对象是否为空时注意不要直接调用判空方法,判空方法特么也是方法

尽量不要用str.toString(),改用String.valueOf()

比如你要判断一个str是否等于"test",你不要str.equals(“test”),可以反过来"test".equals(str)


避免空指针远不止上面这些方法,更多的还需要自己总结经验。


相关文章
|
存储 Java 开发者
探索Java开发中触发空指针异常的场景
作为一名后端开发者在Java编程的世界中,想必大家对空指针并不陌生,空指针异常是一种常见而又令人头疼的问题,它可能会在我们最不经意的时候突然出现,给我们的代码带来困扰,甚至导致系统的不稳定性,而且最可怕的是有时候不能及时定位到它的具体位置。针对这个问题,我们需要深入了解触发空指针异常的代码场景,并寻找有效的方法来识别和处理这些异常情况,而且我觉得空指针异常是每个Java开发者都可能面临的挑战,但只要我们深入了解它的触发场景,并采取适当的预防和处理措施,我们就能够更好地应对这个问题。那么本文就来分享一下实际开发中一些常见的触发空指针异常的代码场景,并分享如何有效地识别和处理这些异常情况。
345 1
探索Java开发中触发空指针异常的场景
|
设计模式 移动开发 Java
【阿里规约】阿里开发手册解读——代码格式篇
本文所有代码格式规范遵循《阿里规约》,从编码、换行符、空格规则、括号规则、字符数等方面展开,详细阐述方法参数、强制转换、运算符、缩进等元素的编写规范。
【阿里规约】阿里开发手册解读——代码格式篇
|
运维 监控 安全
实时计算Flink场景实践和核心功能体验
实时计算Flink场景实践和核心功能体验
|
SQL Java 数据库连接
MyBatis-Plus快速入门:从安装到第一个Demo
本文将带你从零开始,快速入门 MyBatis-Plus。我们将首先介绍如何安装和配置 MyBatis-Plus,然后通过一个简单的示例演示如何使用它进行数据操作。无论你是 MyBatis 的新手还是希望提升开发效率的老手,本文都将为你提供清晰的指导和实用的技巧。
2828 0
MyBatis-Plus快速入门:从安装到第一个Demo
|
存储 数据库 虚拟化
无缝过渡:企业级服务器迁移的策略与最佳实践
【10月更文挑战第4天】随着企业数字化转型的加速,服务器迁移成为企业IT基础设施升级的重要环节。本文从架构与规划的视角,探讨了企业级服务器迁移的策略与最佳实践,旨在帮助企业实现无缝过渡,降低迁移风险,提高迁移效率。
948 4
|
关系型数据库 MySQL
13. Mysql 使用WITH进行复杂和递归查询
13. Mysql 使用WITH进行复杂和递归查询
1395 4
|
数据可视化
8个常见的数据可视化错误以及如何避免它们
本文揭示了8个数据可视化常见错误:误导色彩对比、过多的数据图表、省略基线、误导性标签、错误的可视化方法、不实的因果关系、放大有利数据和滥用3D图形。强调清晰、准确和洞察力的重要性,提醒制作者避免使用过多颜色、一次性展示大量数据、错误图表类型以及展示无关相关性等。正确可视化能有力支持决策,不应牺牲真实性以追求视觉效果。
1331 6
|
存储 关系型数据库 MySQL
【MySQL】数据库规范化的三大法则 — 一探范式设计原则
【MySQL】数据库规范化的三大法则 — 一探范式设计原则
|
网络协议 数据安全/隐私保护 Windows
搭建个人hMailServer 邮件服务实现远程发送邮件
搭建个人hMailServer 邮件服务实现远程发送邮件
324 1
域名中的.org和.com的区别
域名中的.org和.com的区别
2672 0