目录

空指针异常:

空指针容易出现的场景

避免方案


空指针异常:

什么是空,什么是指针?

空就是:小明过生日,小华送给了小明一个“礼物”,这个“礼物”只有一个外面的包装但是里面什么都没有,这个礼物就是””,而空则是小华压根没有给小华准备礼物,这个就是null。

什么是指针:指针:指针存放的是内存地址。

所以:当指针不指向任何内存地址时,就叫做空指针,但是你偏偏在这时还调用了它,则会抛出空指针异常(java.lang.NullPointerException

例:

int[] array = null; System.out.println(array[0]);

这个时候原本array数组是个空指针,没有创建新的对象,在调用这个数组的时候就会产生空指针异常的错误!程序运行会显示java.lang.NullPointerException的异常提示。

为什么会产生空指针异常?

如上面的 int[] array = null; 你在栈内存中开辟了一个存储空间叫array,却没有在堆内存里开辟int类型的数组空间,所以栈内存的array没有存放任何内存地址,这时候你又去调用没有的东西,就会产生空指针异常。

一句话总结:空指针异常无非是因为对象为null的情况下去调用该对象所拥有的方法或者成员变量造成的。

空指针容易出现的场景

1.某一对象没有被实例化,就拿来使用,即调用此对象的方法,会抛空指针异常;如:

/错误写法List lt = null;lt.add("哈哈哈");​//正确写法List lt = new ArrayList();lt.add("哈哈哈");

2.获取从别的对象传过来的对象为空,如:String str=null;

3.数据库查询方面的空指针异常,如:数据库中储存的值为null或不存在;

4.结果集是空的,或者未初始化就被调用了。

避免方案

1.类型转换-优先使用String.valueOf(XXX)方法代替XXX.toString()

当程序代码需要对象的字符串表示形式时,请避免使用该对象的toString方法。如果你的对象的引用等于null,NullPointerException则会抛出,使用静态String.valueOf方法,该方法不会抛出任何异常并打印”null”.

2.类初始化-优先使用实例化代替默认null

class被声明了类型, 默认 class = null; 这样在调用class中方法的时候系统只能给你个空指针异常, 给其实例化就好了:class = new Class();如:List lt = new ArrayList();

3.方法的返回值不要定义成为一般的类型,而是用数组。

这样如果想要返回null的时候,就返回一个没有元素的数组,能避免许多不必要的NullPointerException。

  总之,NullPointerException是由RuntimeException派生出来的,是一个运行时异常,其意指可能会在运行的时候才会被抛出,一个变量是null,,即只有其名,没有实值内容,也没分配内存。当你要去取他的长度,对他进行操作就会出现NullPointException,所以声明变量时最好给它分配好内存空间,给予赋值。

  例如拿该变量与一个值比较时,要么先做好该异常的处理,要么给它进行判断,如:

if (str != null) {​}

  判断一个String的实例a是否等于“b”时,不要写成a.equals(“b”),这样容易抛NullPointerException,而写成”b”.equals(a)就可以避免这个问题,不过对变量先进行判空后再进行操作更好。

该文链接:http://t.csdn.cn/KEwge