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

这篇具有很好参考价值的文章主要介绍了开发过程中空指针异常如何规避?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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());

}文章来源地址https://www.toymoban.com/news/detail-437774.html

到了这里,关于开发过程中空指针异常如何规避?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《C和指针》读书笔记(第九章 字符串、字符和字节)

    在C语言中,字符串和数组有很多相似之处,且官方提供了很多的库函数可供调用。那么字符串和数组这对姐妹花,究竟有着什么样的亲密关系,而作为我们本期的重点角色,字符串又有何独特之处呢? C语言并没有显式的字符串数据类型,因为字符串以字符串常量的形式出现

    2024年02月08日
    浏览(44)
  • 【力扣】344. 反转字符串 <首尾指针>

    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入 :s = [“h”,“e”,“l”,“l”,“o”] 输出 :[“o”,“l”,“l”,“e”

    2024年02月13日
    浏览(42)
  • C语言之通过指针操作字符串

    下面我们来学习通过指针来灵活操作字符串的方法 我们用对指针的遍历来实现判断字符串的长度 在函数形参的声明中由使用[ ]变为*,这些声明方式是一样的,只是表面上的一些变化,实质上并没有什么变化。 程序中发生实质性变化的事函数体,让我们结合下图来看(以输入

    2024年01月19日
    浏览(45)
  • 《热题100》字符串、双指针、贪心算法篇

    思路:对于输入的的字符串,只有三种可能,ipv4,ipv6,和neither ipv4:四位,十进制,无前导0,小于256 ipv6:八位,十六进制,无多余0(00情况不允许),不为空 class Solution:     def solve(self , IP: str) - str:         if \\\'.\\\' in  IP: #有可能是IPV4             res = IP.split(\\\'.\\\')            

    2024年02月09日
    浏览(43)
  • 8.4 【C语言】通过指针引用字符串

    在C程序中,字符串是存放在字符数组中的。想引用一个字符串,可以用以下两种方法。 (1)用字符数组存放一个字符串,可以通过数组名和下标引用字符串中一个字符,也可以通过数组名和格式声明“%s”输出该字符串。 例:定义一个字符数组,在其中存放字符串“I love

    2024年02月11日
    浏览(35)
  • 【算法】算法(模拟、指针等)解决字符串类题目(C++)

    字符串题目有很多种,这里筛选几个考察模拟、双指针等的题目,并用相关算法解决。 思路 题意分析 :题目要求找到字符串数组中的最长公共前缀。 解法一 : 两两比较 遍历数组,每次比较后更新最长公共前缀,并循环比较找最长公共前缀 解法二 : 统一比较 遍历第一个

    2024年01月16日
    浏览(45)
  • LeetCode-763. 划分字母区间【贪心 哈希表 双指针 字符串】

    给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 示例 1: 输入:s = “ababcbacadefegdehijhklij” 输

    2024年04月10日
    浏览(56)
  • 计算字符串长度的三种方法(库函数 指针 )【详解】

    求字符串长度简单来说就是计算一个字符串(字符数组)中元素的个数即从数组头部计数,直到遇到字符串’\\0’结束符为止, 计数结果不包括’\\0’. C语言中的库函数strlen,它包含于string.h中,因此我们需要在使用前添加头文件 ,具体用法如下: strlen从数组头部计数,直到遇到字

    2024年02月06日
    浏览(91)
  • C语言:写一个函数,求字符串的长度,在main函数中输入字符串并输出其长度(指针)

    分析:    在程序中,定义一个函数 fix,该函数使用指针变量来访问字符串中的每个字符,并计算出字符串的长度。fix 函数的参数为指向 char 类型的指针变量 p,表示需要计算长度的字符串。   在主函数 main 中,定义一个大小为 20 的字符数组 a,用于存储输入的字符串。然

    2024年01月21日
    浏览(74)
  • 计算字符串的长度几种方法 | 递归 | 指针减指针 | 计数器 | C语言 | 详解 | 期末考试必看!!!

    1,题目描述 2,分析题目 Ⅰ,题目中要求 除了函数的形参,函数中不能够使用多余的变量 (这是比较 苛刻 的要求)。 Ⅱ,根据此,很自然的想到需要使用 递归 来解决问题。 Ⅲ, 字符串的结束标志是\\\'\\0\\\',因此可以将 读取到\\\'\\0\\\' 作为结束条件 3,关于递归的基本知识 Ⅰ,递

    2024年02月03日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包