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.hbnt orm db 新新增更新最佳实践o99

    atitit.hbnt orm db 新新增更新最佳实践o99 1. merge跟个save了. 1 2. POJO对象处于游离态.持久态.托管态.使用merge()的情况. 1 3. @Dynami ...

  2. Atitit.log日志技术的最佳实践attilax总结

    Atitit.log日志技术的最佳实践attilax总结 1. 日志的意义与作用1 1.1. 日志系统是一种不可或缺的单元测试,跟踪调试工具1 2. 俩种实现[1]日志系统作为一种服务进程存在 [2] ...

  3. atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php

    atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 .打开浏览服务器文件夹java .net php 1. 环境:::项目java web,需要打开浏览服 ...

  4. atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria

    atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria 1. 关键字 1 2. 统计功能框架普通有有些条件选项...一个日期选项..一个日期类型(日,周,月份 ...

  5. atitit.压缩算法 ZLib ,gzip ,zip 最佳实践 java .net php

    atitit.压缩算法 ZLib ,gzip ,zip   最佳实践  java .net php 1. 压缩算法的归类::: 纯算法,带归档算法 1 2. zlib(适合字符串压缩) 1 3. gz ...

  6. atitit.spring3 mvc url配置最佳实践

    atitit.spring3 mvc url配置最佳实践 1. Url-pattern  bp 1 2. 通用星号url pattern的问题 1 3. Other code 1 4. 参考 2 1. ...

  7. Atitit。团队建设--管理最佳实践--如何留住关键人才,防止人才外流 ??

    Atitit.团队建设--管理最佳实践--怎样留住核心人才,防止人才流失 ?? 1. 1.人才流失后果 1 1. 1.员工的离职带走商业技术秘密和客户等资源 1 2. 2.影响在职员工的情绪.极大挫伤 ...

  8. Atitit。团队建设--管理最佳实践--如何留住核心人才,防止人才流失 ??

    Atitit.团队建设--管理最佳实践--如何留住核心人才,防止人才流失 ?? 1. 1.人才流失后果 1 1. 1.员工的离职带走商业技术秘密和客户等资源 1 2. 2.影响在职员工的情绪,极大挫伤 ...

  9. Atitit. 异常的使用总结最佳实践java .net php Vo8f

    Atitit.java 异常的使用总结最佳实践 Vo8f 1. 为什么使用异常 1 2. 用throw抛出一个异常到catch子句中与通过函数调用传递一个参数两者基本相同. 2 3. S E H的主要 ...

随机推荐

  1. [转载] 1. JebAPI 之 jeb.api

    本文转载自: https://www.zybuluo.com/oro-oro/note/142707 JEB API 官方地址:https://www.pnfsoftware.com/apidoc/  ...

  2. 错误:创建 cachingConfiguration 的配置节处理程序时出错: 未能加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Caching,

    问题: 错误:创建 cachingConfiguration 的配置节处理程序时出错: 未能加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Caching ...

  3. ubuntu初次安装后设置root用户密码

    在ubuntu系统下,为了安全起见,在安装过程中,系统屏蔽了用户设置root用户. 设置方法如下: 登录普通用户 打开终端 sudo passwd[sudo] password for [userna ...

  4. LVS集群类型

    一.LVS-NAT 简述:多目标的DNAT,通过Director修改请求报文中的目标地址和端口为LVS挑选出来的某RS的RIP和PORT实现转发 特点: (1)RIP和DIP必须在同一网络,且应该使用 ...

  5. Selenium2+python自动化27-查看selenium API

    前言 前面都是点点滴滴的介绍selenium的一些api使用方法,那么selenium的api到底有多少呢?本篇就叫大家如何去查看selenium api,不求人,无需伸手找人要,在自己电脑就有. p ...

  6. 关于jquery判断对象是否为空

    1. jquery对象分为两种,一种是dom对象,dom对象会自带一个length属性,所以这种情况: obj.length == 0 可以判断对象为空 2. jquery也可以自定义对象,如 var ...

  7. linux学习之——基础命令

    Linux体系基础命令: Linux是一个命令行组成的操作体系!精华在命令行,岂论图形界面成长到什么水平这个原理是不会变的,Linux命令有许多壮大的效用:从简单的磁盘操作.文件存取.到举办庞大的多媒 ...

  8. Infobright存储引擎的特点

    Infobright的优点: (1)高压缩比率 (2)快速响应复杂的分析查询语句 (3)随着数据库的逐渐增大,查询和装载性能基本保持稳定 (4)没有特殊的数据仓库模型(比如星状模型.雪花模型)要求 ( ...

  9. (Python)元祖、字典

    本节将学习元组.字典,以及其他涉及到的相关知识 1.元组 (tuple) 元组由圆括号括起来,元素之间用逗号相隔.元组是不可变对象,一旦定义了,就不能更改 >>> t=('a','b ...

  10. 用JS制作简易的可切换的年历,类似于选项卡

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 30.0px Consolas; color: #2b7ec3 } p.p2 { margin: 0.0px ...