为什么会产生空指针异常,我们先来看一下JDK1.6的API
NullPointerException (Java Platform SE 6)
public class NullPointerException extends RuntimeExceptionnull
当应用程序试图在需要对象的地方使用时,抛出该异常。这种情况包括:
* 调用 null 对象的实例方法。
* 访问或修改 null 对象的字段。
* 将 null 作为一个数组,获得其长度。
* 将 null 作为一个数组,访问或修改其时间片。
* 将 null 作为 Throwable 值抛出。
应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用。
由以上说明可以看出,最主要的原因就是调用的对象是NULL
经常会出现空指针的情况有
(1)字符比较
String str1 = someclass.getSomeString();
if(str1.equalsIgnoreCase("YES"))
{
//do something
}
else if(str1.equalsIgnoreCase("NO"))
{
//do something else
}
(2)读取配置文件
props.getProperty("somekey");
(3)从MAP取值
map.get("key");
(4)从Session取值
String userName = request.getSession().getAttribute("userName");
等等,这里发生NullPointerException的机会非常大,而且运行情况往往和用户输入的数据有关,所以不容易被发现.
如何避免空指针异常?最主要的是养成一个好的编码习惯,在对对象进行调用方法、比较等等操作时,要判断一下对象有没有可能会是NULL,提前进行处理。
尤其要注意的是字符比较的时候:为避免出现NullPointerException,不要这么写:str1.equalsIgnoreCase("YES");而应该写成这样:"YES".equalsIgnoreCase(str1),这样就可以避免空指针异常。
至于这两种写法的差异,主要是程序对对象的操作是先判断再执行,就是先判断对象是否存在,然后再去执行其它操作。第一种方式在判断str1的时候,如果str1是null,这是程序肯定会抛出异常,而第二种就OK,不会报异常。
相关文章
- ZXing二维码生成在Unity3D中出错,数组超出界限的解决办法
- 伊洛纳重度以太病怎么解决 重度以太病解决办法分享
- jQuery 关于IE9上传文件无法进入后台问题的原因及解决办法(ajaxfileupload.js第四弹)
- ModelState.IsValid总为false原因
- VS2013新建MVC5项目,使用nuget更新项目引用后发生Newtonsoft.Json引用冲突的解决办法
- 在java导项目的时候出现 java Build Path/configure build path解决办法
- 【原创】asp.net导出word 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a
- Android Studio中出现Gradle's dependency cache may be corrupt错误的解决办法
- Windows7中安装内存与可用内存不一致的解决办法
- java.io.IOException: Stream closed解决办法