公司介绍 产品展示 业务支持 解决方案 文档资料
网站导航 访客留言 技术论坛
     
     
  产品资料
  业界动态
  JAVA技术


首  页 > 文档资料 > 产品资料  
 
  预防代码中的空指针错误(NullPointerException)

NullPointerException可能是我们程序在运行中最容易出现的错误,这个错误严重的时候有可能终止程序运行,我们在程序中应该劲力避免这样的错误发生。如何在编码过程中就避免这样的错误呢,我们看看在IDEA 5下如何去做。下面我们就拟定以设计模式中常用的工厂方法为例子进行说明。

在进行讲解之前我们需要准备一下环境,首先是IDEA 5,然后我们的项目必须是基于Java 5的,同时需要将%IDEA_HOME%\redist\annotations.jar文件加入到项目的CLASSPATH中。这里要说明一下,IDEA 5是通过Java 5的Annotation机制来审查代码中的空指针错误,所以我们的项目必须是基于Java 5的。最后我们要打开设置面板的“Errors”选项,将“Local Code Analysis”的“Constants Conditions & Exceptions”项设置为警告级别。这样我们所有的准备工作就结束啦。

回到编辑窗口我们依据设计模式的简单工厂方法创建相关类,这里我们只给出工厂类代码,如下:

接下来是客户端代码,这里我们想打印出每种水果的产品价格:

在客户端的代码中,我们发现一个潜在的空指针错误,那就是Banana这种水果根本就不存在,从工厂方法中会返回null对象,那么banana.getPrice()将会抛出空指针错误。

出现这个错误的原因就是工厂方法没有告诉我们它的返回值可能为空,我们却一直以非空的情况去处理。下面看看如何使用IDEA的审查机制发现这种潜在的错误,操作非常简单。

在工厂方法中使用Annotation表示getFruit方法可能返回空值,只需在getFruit方法前加上@Nullable标识。

回到客户端代码,这时IDEA就会给出提示,apple.getPrice()可能返回空指针错误,这个正是从实际情况考虑的:如果Apple对象不存在就可能为空。

接下来我们引入条件判断语句来避免空指针错误,这时IDEA也不会再提示会出现空指针的提示啦。

这时你可能会想,如果将getFruit方法标识为@NotNull,那么空指针判断还有必要吗?试试吧,IDEA会给你答案和惊喜的。

总结:IDEA 5通过引入两个Annotation:@Nullable表示可能为空,@NotNull表示非空,然后依据IDEA强大的代码审查机制就可以将空指针错误在编码过程中审查出来,而不用到运行期去纠正。在一些关键的代码中加上可空或非空标识,将会极大地消除潜在的空指针错误。