NullPointerException原因及解决办法
为什么会产生空指针异常,我们先来看一下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,不会报异常。
