避免空指针的 5 个案例

简介: 什么是空指针?当一个变量的值为 null 时,在 Java 里面表示一个不存在的空对象,没有实际内容,没有给它分配内存,null 也是对象成员变量的默认值。所以,一个对象如果没有进行初始化操作,这时候,如果你调用这个对象的方法或者变量,就会出现空指针异常。
什么是空指针?

当一个变量的值为 null 时,在 Java 里面表示一个不存在的空对象,没有实际内容,没有给它分配内存,null 也是对象成员变量的默认值。

所以,一个对象如果没有进行初始化操作,这时候,如果你调用这个对象的方法或者变量,就会出现空指针异常。

如下面示例会发生空指针异常:

Object object = null;
String string = object.toString();
cc763a9a30193ff56913e29a9ab76e1632f518cf

从类结构图来看,空指针它是属于运行时异常 RuntimeException 的子类,它不是捕获型的,只有在程序运行时才可能报出来,而且会造成程序中断。

什么是运行时异常及异常的分类请看这篇文章:一张图搞清楚 Java 异常机制。
如何避免空指针?

下面说几个空指针的几个最常见的案例及解决之道。

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 中的,更强大,更方便好用。

目录
相关文章
|
1月前
|
Java C语言 C++
空指针
空指针
12 3
|
7月前
|
设计模式 运维 Java
开发中造成空指针的常见写法,如何预防!
开发中造成空指针的常见写法,如何预防!
40 0
|
1月前
|
安全 程序员 编译器
了解野指针与assert断言 拿捏指针的使用!
了解野指针与assert断言 拿捏指针的使用!
|
1月前
|
安全 程序员 编译器
[C语言]指针进阶之野指针与assert断言
[C语言]指针进阶之野指针与assert断言
|
8月前
“野指针”和大厂经典的动态内存错误笔试题
“野指针”和大厂经典的动态内存错误笔试题
|
6月前
|
存储 C语言
C语言之指针的含义,指针类型的定义及使用方法,野指针的定义,以及原因,如何避免野指针
C语言之指针的含义,指针类型的定义及使用方法,野指针的定义,以及原因,如何避免野指针
|
10月前
|
存储 架构师 编译器
C语言---malloc(0)会产生什么结果,真的是空指针吗?
C语言---malloc(0)会产生什么结果,真的是空指针吗?
161 0
C语言---malloc(0)会产生什么结果,真的是空指针吗?
|
程序员 编译器 C语言
【C】动态内存管理(相关函数、常见错误、笔试题)
【C】动态内存管理(相关函数、常见错误、笔试题)
42 0
【C】动态内存管理(相关函数、常见错误、笔试题)
指针(三)- 二级指针、野指针、空指针
指针(三)- 二级指针、野指针、空指针
168 0

热门文章

最新文章