二十九、JavaSE----关于null的处理方式

简介: 二十九、JavaSE----关于null的处理方式

对于Java程序员来说,空指针一直是恼人的问题,我们在开发中经常会受到NullPointerException的蹂踽和壁咚。


       那么关于null,你应该知道下面这几件事情来有效的了解null,从而避免很多由null引起的错误。


1.大小写敏感

2.null是任何引用类型的初始值

3.null既不是对象也不是类型,它是一种特殊的值,你可以将它赋值给任何引用数据类型

4.null不能赋值给基本数据类型

5.将null赋值给包装类,自动拆包会报NPE

6.带有null的引用类型变量,instanceof会报false

7.静态变量为null,调用静态方法不会抛出NPE

8.使用null值安全的方法

9.使用==或!=判断null


大小写敏感



       首先,null 是 Java 中的 关键字 ,像是public、static、final。它是大小写敏感的,你不能将 null 写成 Null 或 NULL ,编辑器将不能识别它们然后报错。

1.png

        这个问题已经几乎不会出现,因为eclipse和Idea编译器已经给出了编译器提示,所以基本不用去考虑这个问题。


null是任何引用类型的初始值



       null是所有引用类型的默认值,Java中的任何引用变量都将nulI作为默认值,也就是说所有Object类下的引用类型默认值都是null。这对所有的引用变量都适用。就像是基本类型的默认值一样,例如int的默认值是0, boolean的默认值是false。


下面是基本数据类型的初始值


类型

初始值
boolean false
char /u0000
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d


null只是一种特殊的值


       null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将它赋予任何类型,你可以将null转换为任何类型。


2.png


       你可以看到在编译期和运行期内,将null转换成任何的引用类型都是可行的,并且不会抛出空指针异常。


null只能赋值给引用变量,不能赋值给基本类型变量。


       持有null的包装类在进行自动拆箱的时候,不能完成转换,会抛出空指针异常,并且null也不能和基本数据类型进行对比


3.png


使用了帯有null值的引用类型变量,instance  of 操作会返回false


4.png


       这是instanceof操作符一个很重要的特性,使得对类型强制转换检查很有用


静态变量为null调用静态方法不会抛出NullPointerException。因为静态方法使用了静态绑定。


使用Null-Safe方法


       你应该使用null-safe安全的方法,java类库中有很多工具类都提供了静态方法,例如基本数据类型的包装类,Integer , Double等。例如:


5.png


        number没有赋值,所以默认为null,使用String.value(number)静态方法没有抛出空指针异常, 但是使用toString却抛出了空指针异常。所以尽量使用对象的静态方法。



null判断


       你可以使用==或者!=操作来比较null值,但是不能使用其他算法或者逻辑操作,例如小于或者 大于。跟SQL不一样,在Java中null == null将返回true,如下所示:


6.png


关于思维导图


常用的Java工具包的思维导图汇总如下:


Java.IO、

7.png


Java.lang

8.png


Java.math

9.png


Java.net

10.png

相关文章
|
5天前
|
前端开发 JavaScript
前端 TS 快速入门之三:class 类
前端 TS 快速入门之三:class 类
7 1
|
8天前
|
监控 Java
JAVASE---异常知识补充
Java异常处理涉及关键字try, catch, finally, throw, throws。示例中展示了如何处理`ArithmeticException`。在`Demo01`,尝试除以零并主动抛出异常,通过不同catch块捕获。`Demo02`中,方法`test`可能抛出异常,并通过`throws`声明。`Test`用try-catch处理除零错误,并将异常转换为`RuntimeException`。自定义异常可通过继承`Exception`类实现,流程包括创建异常类、抛出异常对象、捕获处理异常。
14 1
|
8天前
|
Java Linux 调度
Java【付诸实践 03】Spring定时任务注解@Scheduled+@EnableAsync用法详解(简单说明+应用场景+demo源代码+执行过程分析)
Java【付诸实践 03】Spring定时任务注解@Scheduled+@EnableAsync用法详解(简单说明+应用场景+demo源代码+执行过程分析)
61 2
|
算法 Java
Java常用类(4)--System类
Java常用类(4)--System类
63 0
Java常用类(4)--System类
|
Java 编译器
|
存储 Java Windows
java学习之高级语法(二十)----- File类
java学习之高级语法(二十)----- File类
java学习之高级语法(二十)----- File类
|
编译器
二十五、JavaSE----泛型
二十五、JavaSE----泛型
二十五、JavaSE----泛型
|
Java Spring
二十六、JavaSE----反射
二十六、JavaSE----反射
二十六、JavaSE----反射
|
存储 Java 索引
java学习之高级语法(十一)----- Set 集合
java学习之高级语法(十一)----- Set 集合
|
存储 安全 前端开发
java学习之高级语法(十四)----- 异常
java学习之高级语法(十四)----- 异常
java学习之高级语法(十四)----- 异常

热门文章

最新文章