博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
atitit.避免NullPointerException 总结and 最佳实践 o99
阅读量:6874 次
发布时间:2019-06-26

本文共 2528 字,大约阅读时间需要 8 分钟。

atitit.避免NullPointerException 

 

 

 

对于返回集合的方法很简单,只需要返回空的集合就可以了,而不是null

 

一种可选办法就是不使用空返回值,而是:

 

直接抛出ex,,还是尽量的不去使用null返回值。

 

对于findAction()方法来说抛出一个带有说明的异常要比光秃秃的抛出一个NullPointerException要好的多。

1

2

3

4

5

try{

    ParserFactory.getParser().findAction(someInput).doSomething();

} catch(ActionNotFoundException anfe) {

    userConsole.err(anfe.getMessage());

}

要是你觉得使用try/catch机制比较丑的话,那就给用户比较有意义的反馈。

1

2

3

4

5

6

7

8

public Action findAction(final String userInput){

    /* Code to return requested Action if found */

    return new Action(){

        public void doSomething(){

            userConsole.err("Action not found: "+userInput);

        }

    }

}

 

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

 

1) 从已知的String对象中调用equals()equalsIgnoreCase()方法,而非未知对象。

总是从已知的非空String对象中调用equals()方法。因为,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象ab这么不上心。如果调用者是空指针,这种调用可能导致一个空指针异常

1

2

3

4

5

6

7

8

9

10

11

Object unknownObject = null;

 

//错误方式 – 可能导致 NullPointerException

if(unknownObject.equals("knownObject")){

   System.err.println("This may result in NullPointerException if unknownObject is null");

}

 

//正确方式 - 即便 unknownObject是null也能避免NullPointerException

if("knownObject".equals(unknownObject)){

    System.err.println("better coding avoided NullPointerException"

 

 

valueOf()toString()返回相同的结果时,宁愿使用前者。

因为调用null对象的会抛出空指针异常,如果我们能够使用获得相同的值,那宁愿使用,传递一个nullvalueOf()将会返回“null”,尤其是在那些包装类,像IntegerFloatDoubleBigDecimal

 

使用null安全的方法和库Apache commons 中的StringUtils

 有很多开源库已经为您做了繁重的空指针检查工作。其中最常用的一个的是Apache commons 中的StringUtils。你可以使用StringUtils.isBlank()isNumeric()isWhiteSpace()以及其他的 工具方法而不用担心空指针异常。 

1

2

3

4

5

6

7

8

9

10

11

//StringUtils方法是空指针安全的,他们不会抛出空指针异常

System.out.println(StringUtils.isEmpty(null));

System.out.println(StringUtils.isBlank(null));

System.out.println(StringUtils.isNumeric(null));

System.out.println(StringUtils.isAllUpperCase(null));

 

 

返回空collection或者空数组。

这个Java最佳实践或技巧由Joshua Bloch在他的书中 提到。这是另外一个可以更好的使用Java编程的技巧。通过返回一个空collection或者空数组,你可以确保在调用如 size(),length()的时候不会因为空指针异常崩溃。Collections类提供了方便的空ListSetMap: Collections.EMPTY_LISTCollections.EMPTY_SETCollections.EMPTY_MAP。这里是实 例。

1

2

3

4

public List getOrders(Customer customer){

    List result = Collections.EMPTY_LIST;

    return result;

}

你同样可以使用Collections.EMPTY_SETCollections.EMPTY_MAP来代替空指针。

 

 

使用warpnot raw type...避免你的代码中不必要的自动包装和自动解包。

且不管其他如创建临时对象的缺点,如果wrapper类对象是null,自动包装同样容易导致空指针异常。例如如果person对象没有电话号码的话会返回null,如下代码会因为空指针异常崩溃。

1

2

Person ram = new Person("ram");

int phone = ram.getPhone();

 

默认值

 

参考

在Java中如何避免“!=null”式的判空语句? - ImportNew.htm

避免Java应用中NullPointerException的技巧和最佳实践 - ImportNew.htm

你可能感兴趣的文章
我的友情链接
查看>>
Java方法重载注意事项
查看>>
爱创课堂每日一题第五十九天- javascript继承的6种方法
查看>>
16.1 Tomcat介绍 16.2 安装jdk 16.3 安装Tomcat
查看>>
JS 正则表达式用法
查看>>
文档查看cat_more_less_head_tail
查看>>
python课堂笔记之django-day01(4)
查看>>
九月十九日作业
查看>>
Shell工作笔记01
查看>>
项目、软件开发过程中版本术语
查看>>
CSS实现背景透明,文字不透明(各浏览器兼容)
查看>>
【转】[大学引导]超级链接、字体颜色、音乐播放公式
查看>>
T-SQL中INSERT、UPDATE
查看>>
Linux下Nginx服务器配置Modsecurity实现Web应用防护系统
查看>>
linux下搭建 DNS 服务器
查看>>
实战Nginx与PHP(FastCGI)的安装、配置与优化
查看>>
列表去除重复的值
查看>>
CCNP学习之路之VLAN Hopping
查看>>
CentOS6.4内核升级, 2.6.*版本升级 Kernel 3.10.*
查看>>
8.27(文件权限管理 正则表达式)
查看>>