空指针异常(Null Pointer Exception)是我们平时最容易碰到的,也是最令人讨厌的异常。本文介绍如何避免出现空指针异常。

首先我们看如下的示例

private Boolean isFinished(String status) {

if (status.equalsIgnoreCase("Finish")) {

return Boolean.TRUE;

} else {

return Boolean.FALSE;

}

}

如果status的值为空的话,那么将会出现空指针异常(本例第2行)。所以我们应该使用如下的方法

private Boolean isFinished(String status) {

if ("Finish".equalsIgnoreCase(status)) {

return Boolean.TRUE;

} else {

return Boolean.FALSE;

}

}

这样的话,如果status为空,也不会出现空指针异常。相信我们大多数朋友已经知道这样的方法了,如果一个对象可能为null,那么不需要直接调用它的方法。

接下来我将接着提供几种避免空指针的建议。

1.判断Collection是否为空。

2.使用一些判断方法。

3.assert关键字。

4.Assert类。

5.异常处理。

6.太多的点.操作语法。

7.使用StringUtils类

1.判断Collection是否为空

Collection 为空是指Collection中没有元素。一些开发者如果碰到Collection中没有元素的时候,经常return null,更好的做法是,你应该return Collections.EMPTY_LIST,Collections.EMPTY_SET或者是Collections.EMPTY_MAP.

错误的代码

public static List getEmployees() {

List list = null;

return list;

}

正确的代码

public static List getEmployees() {

List list = Collections.EMPTY_LIST;

return list;

}

2.使用一些判断方法

使用一些方法如contains(),indexOf(),isEmpty(),containsKey(),ContainsValue和hasNext()等来判断,确保不存在空值。

示例:

String myName = "qiyadeng";

List list = Collections.EMPTY_LIST;

boolean exist = list.contains(myName);

int index = list.indexOf(myName);

boolean isEmpty =list.isEmpty();

Map map =Collections.EMPTY_MAP;

exist=map.containsKey(myName);

exist=map.containsValue(myName);

isEmpty=map.isEmpty();

Set set=Collections.EMPTY_SET;

exist=set.contains(myName);

isEmpty=set.isEmpty();

Iterator iterator;

exist = iterator.hasNext();

3.assert关键字

在Java1.4版本之后,提供了断言assert来确定你的代码中的假设。使用的语法如下:

assert expression1

expression1是一个boolean表达式,如果expression1返回的false,系统将会抛出AssertError(没有详细信息)。

另外一种使用方法

assert expression1:expression2

如果expression1返回false,那么系统将会抛出AssertError,并且详细信息为expression2。

示例:

public static String getManager(String employeeId) {

assert (employeeId != null) : "employeeId must be not null";

return "qiyadeng";

}

我使用getManager(null)来调用getManger方法,最后运行的结果是"java.lang.AssertionError:employeedId must be not null"

注意记得使用java选项中加入-enableassertion开启assertion功能。

4.Assert类

Assert类在com.bea.core.repackaged.springframework.util包中,有许多方法可以用于断言。

public static String getManager(String employeeId) {

Assert.notNull(employeeId, "employeeId must be not null");

Assert.hasLength(employeeId, "employeeId must has length greater than 0");

return "qiyadeng";

}

当我同样使用getManager(null)来调用getManager方法,将获得信息"java.lang.IllegalArgumentException: employeeId must be not null"。

5.异常处理

使用try catch处理异常或是检查变量是否为空。

public static String getManager(String employeeId) {

return null;

}

如上代码,我使用下面方法调用

String managerId = getManager("A015");

System.out.println(managerId.toString());

将会发生"java.lang.NullPointerException",为了处理这个异常,我们应该使用try catch来处理异常或者是检查变量是否为null。

try-catch方法

String managerId = getManager("A015");

try {

System.out.println(managerId.toString());

} catch (NullPointerException npe) {

//write your code here

}

或者是对变量进行检查

String managerId = getManager("A015");

if (managerId != null) {

System.out.println(managerId.toString());

} else {

//write your code here

}

6.不要太多的点.操作语法

一些开发者使用太多的这样的方法来减少代码,但是这个对后面的维护和异常处理都是不太好的。

错误的写法

String attrValue = (String)findViewObject("VO_NAME").getCurrentRow().getAttribute("Attribute_NAME");

正确的写法

ViewObject vo = findViewObject("VO_NAME");

Row row = vo.getCurrentRow();

String attrValue = (String)row.getAttribute("Attribute_NAME");

7.使用StringUtils类

StringUtil是org.apache.commns.lang包中的类,我们可以使用该类来避免空指针异常。

例如 StringUtils.isEmpty(),StringUtils.isBlank,StringUtils.equals()等等,更多的你可以参考文档。

为了不出现空指针异常,在写代码的过程中需要时刻检查你的代码是否会抛出NullPointerException,如果你没有时间及时调整的话,使用//TODO标记,便于你后面解决问题。

java catch 空指针异常_在Java中避免空指针异常(Null Pointer Exception)相关推荐

  1. java catch块_用Java编写带有清除操作的catch块

    我找不到关于Java中catch块的任何建议,这些建议涉及一些清除操作,这些清除操作本身可能会引发异常. 经典的示例是stream.close()的示例,通常在finally子句中调用它,如果抛出异常 ...

  2. java避免空指针异常_避免Java中的空指针异常

    java避免空指针异常 空指针异常是Java中最常见,最烦人的异常. 在这篇文章中,我想避免这种不希望的异常. 首先让我们创建引发空指针异常的示例 private Boolean isFinished ...

  3. 空指针异常(Null Pointer Exception)如何避免!

    空指针异常(Null Pointer Exception)是我们平时最容易碰到的,也是最令人讨厌的异常.本文介绍如何避免出现空指针异常. 首先我们看如下的示例 private Boolean isFi ...

  4. java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用

    Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...

  5. java coin介绍_代码示例中的Java 7:Project Coin

    java coin介绍 该博客通过代码示例介绍了一些新的Java 7功能,这些项目在Project Coin一词下进行了概述. Project Coin的目标是向JDK 7添加一组小的语言更改.这些更 ...

  6. java logging包_用JDK中提供的java.util.logging.*包创建Logger对象----原创

    由于项目中用到了Applet与Servlet之间(客户端用Applet.Server端用Servlet)的通信,要求: 1:>客户端与服务端必须出Log. 2:>浏览器在加载Applet时 ...

  7. java 异常对象_在java中的异常处理中的异常对象是什么

    展开全部 Exception类以及他的子类 的一个实例对象 比如32313133353236313431303231363533e58685e5aeb931333264633563 常见异常 1. j ...

  8. java 图片 大小_在JAVA中调整图片大小

    在JAVA中,当我们调整图片的大小或比例时,我们可以按照以下的步棸: 通过调用的ImageIO类的read(File)方法 创建用于输入图片BufferedImage对象. 按所需输出高度输出的Buf ...

  9. java实现分而治之_并发编程中一种经典的分而治之的思想!!

    写在前面 在JDK中,提供了这样一种功能:它能够将复杂的逻辑拆分成一个个简单的逻辑来并行执行,待每个并行执行的逻辑执行完成后,再将各个结果进行汇总,得出最终的结果数据.有点像Hadoop中的MapRe ...

最新文章

  1. Java反射研究(2)
  2. python多线程执行_python多线程实现同时执行两个while循环
  3. 八皇后问题 (信息学奥赛一本通-T1213)
  4. thinkjs——两表联查
  5. 西瓜书+实战+吴恩达机器学习(二二)概率图模型之马尔可夫随机场
  6. 序列化和反序列化(五)——敏感字段加密
  7. python编程:从入门到实践_《Python编程:从入门到实践》【PDF】
  8. sop流程图模板_SOP模板-标准操作流程编写程序.doc
  9. 最新GEM技术导航系统开心版源码+免授权
  10. 领航致远_李腾飞老师javascript_html_css视频教程
  11. Vue项目中完成谷歌统计和百度统计功能
  12. 学习笔记(2):模拟登陆抽屉网(ajax)
  13. 台式计算机用什么电源线,台式机电源怎么选 台式机主机电源如何选择【详解】...
  14. 功能强大的黑科技APP,各种免费资源一应俱全!
  15. python如何将数据写入excel_使用python将数据写入excel
  16. 完美字符子串 单调队列预处理+DP线段树优化
  17. 开源地图MapBox自定义(二):基本概念
  18. 新氧《2021中国医美抗衰消费趋势报告》:医美抗衰市场规模超755亿元
  19. 【区块链与密码学】第9-4讲:基于PKI的群签名算法 I
  20. 简单抽样技术——简单随机样本方差是总体方差的无偏估计

热门文章

  1. 如何快速的将word文档中的图片提取出来
  2. RestCloud 微服务监控中心
  3. Dubbo基础篇_06_Dubbo监控中心的介绍与简易监控中心的安装
  4. GB/Gb分不清楚?
  5. 了解cuda和显卡等基本概念
  6. DS18B20读取温度
  7. NXP RT1052 eFlexPWM—灵活的增强型 PWM例程
  8. 大型计算机网络主机通常采用什么型,全国计算机一级选择题真题集(1)
  9. access通过身份证号提取性别_Access计算根据身份证号码字段计算年龄和性别的表达式,最好是还能确定户籍地址,该在什么地方输入?...
  10. 一次线上事故的处理流程和总结