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

当声明一个引用变量(即一个对象)时,实际上是在创建一个指向对象的指针。
下面的代码,其中声明原始类型的变量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()可以写成:

public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值