为什么会产生空指针异常,我们先来看一下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,不会报异常。
相关文章
- linux平均负载的理解及原因排查
- Linux网卡没有eth0显示ens33原因以及解决办法
- Intelli IDEA:Cannot connect to already running IDE instance. Process xxx is still running的原因及解决方法
- 错误原因分析及解决办法
- ubuntu使用过程中遇到的一些错误及解决办法
- 【反序列化的错误】造成原因和解决办法
- C语言中的 pow 函数 使用方法及注意事项,和常见报错原因,且分享实战中的使用
- error while loading shared libraries: "错误的原因和解决办法
- error while loading shared libraries: 错误的原因和解决办法
- visualstudio中在窗体控件中添加datagridview绑定数据后加载不显示数据的原因及解决办法