atitit.避免NullPointerException

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

一种可选办法就是不使用空返回值,而是空对象模式: 1

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

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

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

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

返回空collection或者空数组。 3

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

默认值 4

参考 4

对于返回集合的方法很简单,只需要返回空的集合就可以了,而不是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()方法。因为equals()方法是对称的,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象a和b这么不上心。如果调用者是空指针,这种调用可能导致一个空指针异常

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对象的toString()会抛出空指针异常,如果我们能够使用valueOf()获得相同的值,那宁愿使用valueOf(),传递一个null给valueOf()将会返回“null”,尤其是在那些包装类,像Integer、Float、Double和BigDecimal。

使用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在他的书Effective Java中 提到。这是另外一个可以更好的使用Java编程的技巧。通过返回一个空collection或者空数组,你可以确保在调用如 size(),length()的时候不会因为空指针异常崩溃。Collections类提供了方便的空List,Set和Map: Collections.EMPTY_LIST,Collections.EMPTY_SET,Collections.EMPTY_MAP。这里是实 例。

1

2

3

4

public List getOrders(Customer customer){

List result = Collections.EMPTY_LIST;

return result;

}

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

使用warp类not 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

atitit.避免NullPointerException 总结and 最佳实践 o99相关推荐

  1. atitit.人脸识别的应用场景and使用最佳实践 java .net php

    atitit.人脸识别的应用场景and使用最佳实践 java .net php 1. 人脸识别的应用场景 1 2. 框架选型 JNI2OpenCV.dll and JavaCV 1 3. Url ap ...

  2. atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换

    atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3 ...

  3. 《转载》Java异常处理的10个最佳实践

    本文转载自 ImportNew - 挖坑的张师傅 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nul ...

  4. 【转】Java中关于异常处理的十个最佳实践

    原文地址:http://www.searchsoa.com.cn/showcontent_71960.htm 导读:异常处理是书写强健Java应用的一个重要部分,Java许你创建新的异常,并通过使用 ...

  5. java微妙_10个微妙的Java编码最佳实践

    编写和维护jOOQ(Java中内部DSL建模的SQL)时遇到过这些.作为一个内部DSL,jOOQ最大限度的挑战了Java的编译器和泛型,把泛型,可变参数和重载结合在一起,Josh Bloch可能不会推 ...

  6. java 异常 最佳实践_关于JAVA异常处理的20个最佳实践

    在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked exceptions).非检查性异常(unche ...

  7. 关于JAVA异常处理的20个最佳实践

    关于JAVA异常处理的20个最佳实践 在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked excep ...

  8. 小菜:Java异常处理的10个最佳实践

    转载自   小菜:Java异常处理的10个最佳实践 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nu ...

  9. java 8入门与实践_30个Java入门技巧和最佳实践

    java 8入门与实践 Java是最流行的编程语言之一-无论是Win应用程序,Web应用程序,移动,网络,消费电子产品,机顶盒设备,Java随处可见. 在Java上运行的设备超过30亿. 据Oracl ...

  10. 10个精妙的Java编码最佳实践

    这是一个比Josh Bloch的Effective Java规则更精妙的10条Java编码实践的列表.和Josh Bloch的列表容易学习并且关注日常情况相比,这个列表将包含涉及API/SPI设计中不 ...

最新文章

  1. 无限极分类原理与实现
  2. Lotus Sametime 服务器的安装和配置
  3. python 共现矩阵_Python词组共现矩阵
  4. php 多表查询输出,ThinkPHP多表查询
  5. table T371A field IBTYP的search help
  6. DIY人脸跟踪电风扇送女朋友(1)
  7. 社区团购如今进行得如火如荼
  8. 【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能
  9. com.mysql.jdbc.connection和java.sql.connection的区别
  10. python可以连接sql server_python连接sqlserver数据库之一
  11. android textview 字体边框,为TextView添加一个边框的几种办法
  12. CentOS8桌面图标不显示
  13. 逻辑上的“谬误”真的是我们应该所认为的错误吗?
  14. 开源并“免费”的Linux平台DAW——Ardour 4.0发布
  15. Java面试汇总+答案
  16. Smartbi手把手教你如何搭建企业大数据BI平台系统
  17. 软件设计领域没有银弹,但代码大师MaxKanat-Alexander的建议绝对能给你带来启发...
  18. Linux Centos7 配置两个(多个)JDK 用户级别JDK
  19. 我所理解的技术领导力
  20. windows8计算机在哪,win8怎么投屏,win8系统投屏在哪

热门文章

  1. 第二章计算机组成原理例题,计算机组成原理习题第二章运算方法和运算器
  2. glut相关函数说明
  3. crossplaform---Nodejs in Visual Studio Code 04.Swig模版
  4. Vue项目在nginx下的部署实践(个人学习总结)
  5. noi.ac #529 神树的矩阵
  6. gcc -l:手动添加链接库
  7. vue 实现 tomato timer(蕃茄钟)
  8. ThinPHP_5的请求和响应
  9. hdu 1506:Largest Rectangle in a Histogram 【单调栈】
  10. 统计各班参加补考的人数