在测试时,查看log的时候,有时候会看到NullPointerException-NPE的错误,大名鼎鼎的空指针!
之前一直都不知道咋回事;记录下;
首先先来了解在java中,什么是null呢?
如果创建一个引用的数组,但是不赋值的话,输出是null;说明引用也有缺省值 --null
1.null是引用类型的缺省值
2.null代表空,不存在,可以读作空
3.引用类型的数组创建出来,初始值都是空
用java代码举个例子!
1.创建一个Mercandise类;
public class Mercandise {
String name;
String id;
int count;
double price;
}
2.创建一个测试类
public class CheckBeforeUse {
public static void main(String[] args) {
// 数组在创建出来之后,会按照类型给数组中的每个元素赋缺省值。
// 引用类型的缺省值是null
Mercandise[] merchandises = new Mercandise[9];
// 给索引为偶数的引用赋值
for (int i = 0; i < merchandises.length; i++) {
if (i % 2 == 0) {
merchandises[i] = new Mercandise();
}
}
// 依次输出数组的值
for (int i = 0; i < merchandises.length; i++) {
System.out.println(merchandises[i]);
}
System.out.println(merchandises[7]);
merchandises[7].name = "不存在的商品,不存在的名字";
}
}
依次输出数组的值结果: ----打印的是引用的地址
Mercandise@2f92e0f4
null
Mercandise@28a418fc
null
Mercandise@5305068a
null
Mercandise@1f32e575
null
Mercandise@279f2327
null
merchandises[7].name = "不存在的商品,不存在的名字"; --这句话会报错
Exception in thread "main" java.lang.NullPointerException
at CheckBeforeUse.main
这就是null带来的问题
1.大名鼎鼎的NullPointerException(NPE)
如果一个引用为空,然后还尝试去访问这个引用的一些属性,会报错
2.如果不确定,使用前判断引用是不是空
如何避免:(使用前判断是否为空)
if (merchandises[i]! = null)
{**********}
通过null理解引用的二极跳
引用为null的时候可以直接输出,引用本身有值,值为空
此时再问这个值为空的具体属性,会报错