为什么会发生空指针异常,首先来看看JDK1.6的API
nullpointerexception (javaplatformse6)。
publicclassnullpointerexceptionextendsruntimeexceptionnull
当APP应用程序尝试在需要对象的位置使用对象时引发异常。 这包括以下内容
调用空对象的实例方法。
访问或修改空对象中的字段。
将null作为数组,获取其长度。
将null作为数组访问或更改其时间片。
将null作为Throwable值抛出。
该APP应用程序必须抛出指示未授权使用空对象的类的实例。
从以上说明可以看出,最主要的原因是调用对象为空
空指针可能经常出现
)1)文字比较
stringstr1=some class.get somestring (;
if(str1.equalsignorecase('yes ' ) )
{
//do something
}
else if (str1. equals ignore case (' no ' ) )
{
//do something else
}
)2)配置文件读取
props.getproperty('somekey );
(3)从映射图中取值
map.get(key );
(4)从会话中取值
string username=request.getsession ().getattribute('username );
等等,这里发生NullPointerException的机会非常大,而且运行情况往往与用户输入的数据有关,很难被发现。
如何避免空指针异常? 最重要的是,在执行调用和比较对象等操作时,要确定对象是否可能为NULL,并养成预先处理的良好编码习惯。
请特别注意文字的比较。 请不要这样写,以免发生NullPointerException。 str1.equalsignorecase('yes ); 应该这样写。' yes'.equalsignorecase(str1)这样可以避免空指针异常。
在这两种书写方式之间的区别主要在于程序对对象执行的操作是先判断后执行,先判断是否存在对象,然后执行其它操作。 第一种方法是在确定str1时,如果str1为null,则程序一定会抛出异常,而第二种方法是OK,不报告异常。