判空常见操作 空指针异常

一.问题

小栗子
空指针异常是Java编程中最常见的异常之一。它通常发生在尝试使用空对象引用时。例如,如果您尝试调用一个空对象的方法,则会抛出空指针异常。这是因为该对象没有被实例化,因此没有任何方法可以调用。

以下是一个示例代码,演示了如何在Java中触发空指针异常:

String str = null;
System.out.println(str.length());

在上面的代码中,str变量被初始化为null。当您尝试调用str.length()时,就会空指针异常

空指针异常是Java中最常见的异常之一。空指针异常的原因有以下几种:1、调用空对象的实例方法;2、访问或修改字段或一个空对象;3、以null的长度作为数组;4、访问或修改null插槽,就好像它是一个数组一样;5、将null视为Throwable值。

/4/12(1) java空指针异常解决_Java中的空指针异常是什么以及如何解决?_cunjiu9486的博客-CSDN博客. https://bing.com/search?q=%e7%a9%ba%e6%8c%87%e9%92%88%e5%bc%82%e5%b8%b8%e7%9a%84%e5%8e%9f%e5%9b%a0 访问时间 2023/4/12.
(2) java空指针异常:java.lang.NullPointException - thinker_zhao - 博客园. https://www.cnblogs.com/ttflove/p/6033393.html 访问时间 2023/4/12.
(3) 空指针异常是什么原因-常见问题-PHP中文网. https://www.php.cn/faq/466089.html 访问时间 2023/4/12.
(4) 空指针异常主要原因以及解决方案_接口空指针异常_小羊咩恩的博客-CSDN博客. https://blog.csdn.net/qq_38697767/article/details/103452712 访问时间 2023/4/12.
(5) NullPointerException - 廖雪峰的官方网站. https://www.liaoxuefeng.com/wiki/1252599548343744/1337645544243233 访问时间 2023/4/12.

二.空指针的含义

1空对象;
在Java中,空对象是指一个引用变量没有通过new分配内存空间,这个对象就是空对象,Java使用关键字null表示空对象。产生空对象主要有以下两种可能性: 1 程序员自己忘记了实例化,所以程序员必须防止这种情况发生,应该仔细检查自己的代码,为自己创建的所有对象进行实例化并初始化。 2 空对象是其它地方传递过来的,需要通过判断对象是否为 null 进行避免。¹²

对象的其中几个属性为null,是空对象吗

不是空对象。空对象是指一个引用变量没有通过new分配内存空间,这个对象就是空对象,Java使用关键字null表示空对象。如果一个对象的其中几个属性为null,那么这个对象仍然不是空对象,因为它已经被实例化了。

月光晒了很凉快的博客

空对象是指该对象的所有属性都为null吗

不是所有属性都为null,而是该对象没有通过new分配内存空间,这个对象就是空对象,Java使用关键字null表示空对象。如果一个对象的所有属性都为null,那么这个对象仍然不是空对象,因为它已经被实例化了
(只有new 的时候就是实例化)
2空元素
在Java中,空元素是指一个没有元素内容的元素,例如,一个空的ArrayList就是一个空元素。⁴⁵⁶

源: 与必应的对话, 2023/4/12(1) Java ArrayList isEmpty() 方法 | 菜鸟教程. https://www.runoob.com/java/java-arraylist-isempty.html 访问时间
(2) 【Java】Java中空字符的写法_小镇攻城狮的博客-CSDN博客. https://blog.csdn.net/Awt_FuDongLai/article/details/115374860
(3) Java中空对象(null)引用方法及属性简单分析! - CSDN博客. https://blog.csdn.net/lgh2691861/article/details/52248038
(4) HTML_空元素(标签)详解 - 简书. https://www.jianshu.com/p/c9a262d5704c
(5) 空元素在开始标签中进行关闭 什么意思 - 百度知道. https://zhidao.baidu.com/question/243350668.html
(6) HTML中的空元素 - 范仁义 - 博客园. https://www.cnblogs.com/Renyi-Fan/p/12064557.html
3空指针

什么是空指针

在Java中,指针是一个引用变量,它指向一个对象。就是一个内容为内存地址的变量

如果一个引用变量的值为null,那么它就不指向任何有效的对象,这时如果试图调用一个空对象的属性或方法时,会抛出空指针异常(NullPointerException)¹²。因此,在访问一个对象之前,需要先判断该对象是否为空。例如:if (object != null) { // 对象不为空 }。

如何避免空指针

当valueOf()和toString()返回相同的结果时,宁愿使用前者。

三.解决:

整体思想:
在Java中,避免空指针异常的方法有很多。其中一种方法是使用assert关键字检查对象是否为null。另一种方法是使用Optional类,它可以避免空指针异常并提高代码的可读性。此外,还可以使用if语句或三目运算符检查代码中是否存在null值
常见解决方法:
原博文江南一棵树

1字符串

StringUtils.isBlank(str)
StringUtils.isNotBlank(str)等价于str != null && str.length > 0 && str.trim().length > 0
StringUtils.isNotEmpty等价于str != null && str.length > 0

2集合

if(list!=null && list.size()>=0){
//判断list是否为空,且list集合中包含的元素个数小于等于0个
}

等价于isEmpty()

//判断集合是否为空(包括null和没有元素的集合)。
//可以使用以下代码进行简化:
if (CollectionUtils.isEmpty(simuSubjectTaskList) || (simuSubjectTaskList.size() == 1 && "0".equals(simuSubjectTaskList.get(0).getParentSimuTaskTypeUuid()))) {
}

这个简化做了两个修改:

  1. 使用 CollectionUtils.isEmpty() 方法来判断simuSubjectTaskList是否为null或空列表。
  2. 删除了原来的 simuSubjectTaskList.size() == 0 部分,因为可以用 CollectionUtils.isEmpty() 来代替。
    这样,代码更加简洁并且可读性更好。

3数组

if(list!=null && list.length()>0){
//判断list是否为空,且list集合中包含的元素个数小于等于0个
}
注意:数组长度=0,不一定是null。所以length=0不能作为判空的条件
可以使用以下代码进行简化:

string[]  arr=new string[];
if (flag && ArrayUtils.isEmpty(arr)) {
}

这个简化做了两个修改:

  1. 使用 ArrayUtils.isEmpty() 方法来判断simuRequirement.getGmtScope()是否为null或空数组。
  2. 将条件判断中的括号进行简化。
    这样,代码更加简洁并且可读性更好。

4对象

Objects.isNull(message)

java8的新特性 optional

公众号Java面试哪些事儿
萝卜i

四‘发现一个有意思的现象

允许在初始化的时候设置引用变量为null,如果接下来不对其做任何操作直接去访问的话会报空指针异常,为什么要允许初始化的时候设置为null呢,

五实践,以及注意事项

sijing

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

耳东哇

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值