java中什么是空指针异常_什么是空指针异常(NullPointerException),如何解决避免它?...

1、什么是空指针异常

当我们声明一个引用类型的变量,实际上是创建一个指向对象的指针。

看一下下面代码,声明了一个原始类型(值类型)的int变量:int y;

y=110;

在上面代码中,声明的int型变量y,Java会将它初始化为0。第二行给它赋值为110,110这个值将被写入y指向的内存位置。

但如果声明一个引用类型变量就会发生不同的情况,看一下下面的代码:Integer num;

num = new Integer(110);

第一行中声明一个变量num,它不是原始类型(值类型)。因为Integer是引用类型,所以它包一个指针。没有为num变量赋值,初始值就为null。

第二行new关键字,实例化一个Integer类型的对象,并且把对象的指针赋值给num。可以用点(.)调用对象的属性或方法。

当我声明引用类型变量时,没有为什么实例化创始对象时,我们调用对象的方法或属性时,就会发生空指针异常(NullPointerException)。

大多数情况下,编译器会检查这个问题,提示num可能没有被初始化。但有些情况下,代码不是直接创建那个对象。例如,下面的代码,public void doSomething(SomeObject obj){

//do something to obj

}

上面代码,可能出现调用之前没有为obj传入一个创建的对象,但这种情况Java编译器也检查不到。也有可能传入了,但是下面这样的调用:doSomething(null);

在这种情况下,obj是null,如果在方法中调用obj的属性,就会发生空指针异常(NullPointerException)。由于这是程序员的错误,程序员需要那个错误信息查找问题。

2、如何解决避免空指针异常

或许存在这样的情况,该方法不仅仅是对传入的对象进行操作,可能可以接受null这样的参数。在这种情况下,你需要在方法中做出判断,并且在方法文档中解释这一点。

例如,/**

* @param obj 是可选参数,有情况下可能为null

* 返回值是____.

*/

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、付费专栏及课程。

余额充值