码迷,mamicode.com
首页 > 其他好文 > 详细

NullPointerException

时间:2019-04-24 23:42:50      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:user   为什么   注意   error:   ror   内存   影响   提高   初始化   

1.什么是空指针?
当一个变量的值为 null 时,在 Java 里面表示一个不存在的空对象,没有实际内容,没有给它分配内存,null 也是对象成员变量的默认值。
所以,一个对象如果没有进行初始化操作,这时候,如果你调用这个对象的方法或者变量,就会出现空指针异常。

2.为什么发生空指针异常?
Object object = null;
String string = object.toString();
空指针它是属于运行时异常 RuntimeException 的子类,它不是捕获型的,只有在程序运行时才可能报出来,而且会造成程序中断。


3.如何避免空指针?
下面说几个空指针的几个最常见的案例及解决之道。

1、字符串比较,常量放前面
if(status.equals(SUCCESS)){

}
这个时候 status 可能为 null 造成空指针异常,应该把常量放前面,就能避免空指针异常。

if(SUCCESS.equals(status)){

}

2、初始化默认值
在对象初始化的时候给它一个默认值或者默认构造实现,如:

User user = new User();
String name = StringUtils.EMPTY;
3、返回空集合 在返回一个集合的话,默认会是 null,统一规范返回一个空集合。 举个 List 例子,如: public List getUserList(){ List list = userMapper.gerUserList(); return list == null ? new ArrayList() : list; } 这样接收方就不用担心空指针异常了,也不会影响业务。 4、断言 断言是用来检查程序的安全性的,在使用之前进行检查条件,如果不符合条件就报异常,符合就继续。 Java 中自带的断言关键字:assert,如: assert name == null : "名称不能为空"; 输出: Exception in thread "main" java.lang.AssertionError: 名称不正确 不过默认是不启动断言检查的,需要要带上 JVM 参数:-enableassertions 才能生效。 Java 中这个用的很少,建议使用 Spring 中的,更强大,更方便好用。 Spring中的用法: Assert.notNull(name,"名称不能为空");
5、Optional Optional 是 JDK 8 新增的新特性,再也不用 != null 来判断了,这个在一个对象里面的多个子对象连续判断的时候非常有用。 如何避免空指针,一是要注意代码编写规范,二是要提高代码素养。

 

NullPointerException

标签:user   为什么   注意   error:   ror   内存   影响   提高   初始化   

原文地址:https://www.cnblogs.com/wbxss/p/10765590.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!