空指针异常出现的几种原因及解决方法
目录
空指针异常:
什么是空,什么是指针?
空就是:小明过生日,小华送给了小明一个“礼物”,这个“礼物”只有一个外面的包装但是里面什么都没有,这个礼物就是"",而空则是小华压根没有给小华准备礼物,这个就是null。
什么是指针:指针:指针存放的是内存地址。
所以:当指针不指向任何内存地址时,就叫做空指针,但是你偏偏在这时还调用了它,则会抛出空指针异常(
java.lang.NullPointerException
)例:
int[] array = null; System.out.println(array[0]);
这个时候原本array数组是个空指针,没有创建新的对象,在调用这个数组的时候就会产生空指针异常的错误!程序运行会显示
java.lang.NullPointerException
的异常提示。为什么会产生空指针异常?
如上面的
int[] array = null;
你在栈内存中开辟了一个存储空间叫array,却没有在堆内存里开辟int类型的数组空间,所以栈内存的array没有存放任何内存地址,这时候你又去调用没有的东西,就会产生空指针异常。
空指针容易出现的场景
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)就可以避免这个问题,不过对变量先进行判空后再进行操作更好。
来源地址:https://blog.csdn.net/lemonwobuzhida/article/details/127725039
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341