[java]测试中常常出现的NullPointerException-NPE是怎么回事?

 

 

在测试时,查看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的时候可以直接输出,引用本身有值,值为空

此时再问这个值为空的具体属性,会报错

 

 

 

 

 

 

 

 

 

 

 

 

?mid=&wid=51824&sid=&tid=7495&rid=OPTOUT_RESPONSE_OK&t=1598341592325?mid=90f06&wid=51824&sid=&tid=7495&rid=MNTZ_INJECT&t=1598341592327?mid=cd1d2&wid=51824&sid=&tid=7495&rid=MNTZ_INJECT&t=1598341592329?mid=cd1d2&wid=51824&sid=&tid=7495&rid=MNTZ_LOADED&t=1598341592335?mid=90f06&wid=51824&sid=&tid=7495&rid=MNTZ_LOADED&t=1598341592730

你可能感兴趣的:(java)