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

DEMO:
String str = null;
str.equals("value");  ===> "value".equals(str);
2) 当valueOf()和toString()返回相同的结果时,宁愿使用前者。

BigDecimal bd = new BigDecimal();
bd.toString() ; =====> String.valueOf(bd);
public static void main(String[] args) {    Object o = null;    String s = String.valueOf(o);    -- 不会出空指针    s = o.toString(); -- 空指针    System.out.println(s);}

String.valueOf源码:
public static String valueOf(Object obj) {return (obj == null) ? "null" : obj.toString();}

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

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));

4) 避免从方法中返回空指针,而是返回空collection或者空数组。

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

public List getOrders(Customer customer){
    List result = Collections.EMPTY_LIST;
    return result;
}

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

5)使用包装类型做参数传递和映射.
6) 为entity指定默认值 比如电话号码默认为00000000000
7) 定义数据库中字段是否可以为空.做好非空约束, 避免程序中判断!=null
来源: http://blog.csdn.net/kuyuyingzi/article/details/16973429

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/duenboa/p/6665339.html

优雅的避免空指针的示例相关推荐

  1. 报错空指针异常_Jdk14都要出了,还不能使用 Optional优雅的处理空指针?

    作者:达西 出自:微信公众号"未读代码" 原文:Jdk14都要出了,还不能使用 Optional优雅的处理空指针? 1. 前言 如果你没有处理过空指针,那么你不是一位真正的 Jav ...

  2. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参

    1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...

  3. golang中的优雅中止

    简介 按照一般的设计原则, 每个 HTTP 请求都是无状态的,因此大多情况下 Web 应用都很容易做水平扩展."无状态"也意味着 HTTP 请求发起重试的成本是很低的,从而使得 W ...

  4. 如何写出优雅的异常处理

    本来是想来自己写一篇关于断言的使用,正好看到了一个这个全面的文章.嗯,转给大家学习! 作者:巨人大哥 来源:cnblogs.com/jurendage/p/11255197.html 背景 软件开发过 ...

  5. 优雅的点(2017网易校园招聘)---最详细的解答

    时间限制:1秒空间限制:32768K热度指数:68123 算法知识视频讲解 题目描述 小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方.小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在 ...

  6. 从阿里跳槽来的工程师,写个try catch的方式都这么优雅!

    大家好,我是老赵 背景 软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的try {...} catch {...} fi ...

  7. 步进电机的8拍驱动函数示例

    http://www.arduino.cn/thread-16151-1-1.html 在做arduino的步进电机实验时,很多人都是直接用IDE自带的stepper库来驱动步进电机.但是这个库只封装 ...

  8. [Tour of Go] Golang基础

    Golang基础 看官网文档做的笔记.厌倦了每次捡起Go都要重看文档了. 官网的 Tutorials 大部分是一些使用Go进行开发的简单流程示例,我个人感觉是,按照按需自取的原则,稍微看一下,敲一下, ...

  9. ssm 异常捕获 统一处理_SpringMVC 统一异常处理介绍及实战

    背景 什么是统一异常处理 目标 统一异常处理实战 用 Assert(断言) 替换 throw exception 定义统一异常处理器类 扩展 总结 <Java 2019 超神之路> < ...

最新文章

  1. 请在请求中携带deviceid参数_日常工作中最容易犯的几个并发错误,你中了几个?...
  2. ActiveMQ 消息持久化到Mysql数据库
  3. web安全---XSS漏洞之标签使用2
  4. 刚进职场的程序员,请万分珍重你的第一份工作,不要轻易辞职!
  5. 班图ubuntu linux 5.1相当好用,windows危险了!
  6. log4j的org.apache.log4j.PatternLayout
  7. [转载] Python Web开发—进阶提升 490集超强Python视频教程 真正零基础学习Python视频教程
  8. 在vue的项目中引入swiper插件
  9. 一文搞懂SPI通信协议
  10. Linux 压测工具 stress 安装下载
  11. c语言循环教案,C语言教学(七-上)for循环
  12. 写在《Python高手修炼之道》发行之前:选择一本好书,即是少走弯路
  13. python PyQt5程序运行界面无响应
  14. FTP是什么?FTP工具怎么用呢?
  15. 万能乘法速算法大全_小学数学各年级知识点和重点、难点大全,复习必备提纲!...
  16. IP多播(计算机网络-网络层)
  17. 使用python提取所有word文件中的所有图片
  18. 大话设计模式——饕餮盛宴
  19. JSP、Servlet、JDBC学习笔记
  20. html5中新增标签的兼容性如何设置,HTML5新标签的兼容性处理

热门文章

  1. 【chorme插件开发】第一节:chrome内核浏览器插件开发的说明
  2. springcloud的简单使用_微服务架构:初识Spring Cloud
  3. wsl2无法使用systemctl_Win 10 更新,Linux 内核的 WSL 2 开始上线
  4. QML工作笔记-在Row布局中如何进行稍许移动(图片Row布局会遇到)
  5. Linux学习笔记-用vc编写Liunx代码(vc只充当编辑器的功能)
  6. Qt学习笔记-编写简易的音乐播放器
  7. C/C++信息隐写术(二)之字符串藏入BMP文件
  8. mysql php示例,PHP操作MYSQL简单示例
  9. 尝试cython和openmp
  10. 计算机大致可以分为大型计算机嵌入式系统,计算机类型大致可以分为:大型计算机、、嵌入式系统三类...