java.lang.NullPointerException空指针异常分析

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

当声明一个引用变量(即一个对象)时,实际上是在创建一个指向对象的指针。
下面的代码,其中声明原始类型的变量int:

int x;
x = 10;

在这个例子中,变量x是一个int , Java将初始化为0。当给他分配值 10 时,10被写入到被引用的内存位置X.

但是,当试图声明引用类型时,就会报错。如下面的代码:

Integer num;
num = new Integer(10);

第一行声明一个变量名num,由于是引用类型,所以系统给他默认复制为 null;

在第二行中,new关键字用于实例化对象。指针将变量num分配给第一行Integer目标,这时就会报空指针。

这个NullPointerException异常是,当声明变量但未创建对象时发生。所以指针指向的是一些实际上并不存在的东西。

如果试图取消引用num在创建对象之前,会报NullPointerException。在通常情况下,编译器会发现问题并让你知道。num may not have been initialized(num没有初始化)
“但是有时可以写不直接创建对象的代码。

例如,可以有如下方法:

public void doSomething(SomeObject obj) {
   //do something to obj
}

在这种情况下,不用再创建对象obj,而是假设它是在调用doSomething()方法之前创建的。注意,有可能调用这样的方法:

doSomething(null);

在这种情况下,obj是null。如果该方法意在对传入的对象做一些事情,则适当地抛出NullPointerException因为它是提示给程序员的错误,程序员需要这些信息来调试。

或者,可能存在这样的情况,该方法的目的不仅仅是对传入的对象进行操作,因此(空参数)可以是可接受的。在这种情况下,需要判断参数是否是null,并给出其他实现条件else。应该在文档中解释这一点。例如,doSomething()可以写成:

扫描二维码关注公众号,回复: 6612655 查看本文章
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35548458/article/details/93297641
今日推荐