之前我们提到过,在学习数组这一篇章时,有两种运行时异常,可能会反复的出现,首先第一个就是我们之前所讲述的,数组下标越界异常(ArrayIndexOutOfBoundsException),如需查看详情,可跳转:
数组下标越界异常(ArrayIndexOutOfBoundsException)以及解决方案_数组下标越界所有报错情况-CSDN博客
这篇文章,再有一个就是我们今天的主题,空指针异常 (NullPointerException)了。
它也是一个很经典的运行时异常,遇到这种情况,我们的程序确实会正常进行编译,但只要一运行,程序就会出现上图所示的报错,这就代表,我们的逻辑可能出现了错误,下面我们来看一下例子:
public class Temp {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[][] nums = new int[3][] ;
nums[2][0] = 10 ;
}
}
在上面的代码中,我们创建了一个[3][]这样的数组,代表我们的变量nums中可以存入3个一维数组,但我们并没有为其赋初值。
此时,我们如果向nums[2][0](即第三个数组的第一个元素)赋值的话,我们会发现点击运行后,空指针异常就会出现了。
原因是,如果我们并没有对引用类型的变量做初始化处理的话,这个引用类型的变量的将会由虚拟机自动赋值为一个默认值null,代表什么都没有。
如果什么都没有,本身并不算错误,但如果什么都没有,还想要对其进行操作,虚拟机就会判定为异常了。
比如说一个教室中有三把椅子(三个数组),但只有前两把椅子上坐了同学(前两个已经赋值),第三把椅子没有人坐(第三个为默认值null)。
这是完全可以的,但此时,我非要说,第三把椅子那位同学,请你起立,(System.out.println(nums3[0]))这显然使没办法成立的,此时就会出现异常了。
因此,想要避免出现空指针异常,我们一般有两种做法,一就是对变量进行初始化,使每个位置的元素都有值,可以理解为,让全部的椅子上都有同学,这样我们可以对所有椅子上的同学进行对应的交流了。二就是不去操作其值为null的元素,即只对椅子上有的同学们进行交流。
现在,相信大家对空指针异常(NullPointerException),也能够有一个简单的认识,并具有一定的处理手段了,那么今天的内容就到这里啦,如果存在哪些疑问或问题欢迎大家指出,我们下期再见~