优雅的避免空指针的示例

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)

时间: 2024-11-08 22:58:23

优雅的避免空指针的示例的相关文章

牛客网-优雅的点(网易)

题目描述 小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方.小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他. 例如:半径的平方如果为25 优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12个点. 输入描述: 输入为一个整数,即为圆半径的平方,范围在32位int范围内. 输出描述: 输出为一个整数,即为优雅的点的个数 示例1 输入 25 输出 12 分析:题目思路很

Linux下交互式添加用户脚本(四个示例)

最近需要用到Linux下脚本交互方式添加用户,自己整了三个脚本分享并记录一下,便于后续使用,同时也分享下,希望能帮到和我一样的Shell脚本菜鸟. 示例一:优雅方式添加用户 根据提示,输入你要添加的用户,如果用户存在,则提示后,退出脚本: #!/bin/sh # This scripts is created by miaocbin # QQ:289303323 # blog:http://miaocbin.blog.51cto.com # 优雅方式添加用户:如果用户存在,则提示已存在,并退出,

优雅的点()

题目描述 小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方.小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他.例如:半径的平方如果为25优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12个点. 输入描述: 输入为一个整数,即为圆半径的平方,范围在32位int范围内. 输出描述: 输出为一个整数,即为优雅的点的个数 示例1 输入 25 输出 12 1 import j

[原]toString()方法的复写作用, 以及打印集合.

java中的每个类的根都是Object的子类. 必然有拥有了Object的所有方法. 在package java.lang.Object源码中: public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); // 类的全限定名[email protected]+哈希地址} eg: Object o = new Object();System.out.prin

还看不懂同事的代码?超强的 Stream 流操作姿势还不学习一下

Java 8 新特性系列文章索引. Jdk14都要出了,还不能使用 Optional优雅的处理空指针? Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下? 还看不懂同事的代码?Lambda 表达式.函数接口了解一下 前言 我们都知道 Lambda 和 Stream 是 Java 8 的两大亮点功能,在前面的文章里已经介绍过 Lambda 相关知识,这次介绍下 Java 8 的 Stream 流操作.它完全不同于 java.io 包的 Input/Output Stream ,也不是大数

strchr()函数 和 strrchr() 函数

strchr 定义于头文件 <string.h>char *strchr( const char *str, int ch );寻找ch(按照如同(char)ch的方式转换成char后)在str所指向的空终止字节字符串(每个字符都被看做unsigned char)中的首次出现位置.终止的空字符被认为是字符串的一部分,并且能在寻找'\0'时被找到.若str不是指向空终止字节字符串的指针,则行为未定义.参数str - 指向待分析的空终止字节字符串的指针ch - 要查找的字符返回值指向str找到的字

Android--什么是Android的C/C++ NativeCrash

1. 空指针 2. 野指针 3. 数组越界 4. 整数除以零 5. 格式化输出参数错误 6.缓冲区溢出 7.主动抛出异常 Android上的Crash可以分两种: 1.Java Crash java代码导致jvm退出,弹出“程序已经崩溃”的对话框,最终用户点击关闭后进程退出.Logcat 会在“AndroidRuntime”tag下输出Java的调用栈. 2.Native Crash通过NDK,使用C/C++开发,导致进程收到错误信号,发生Crash,Android 5.0之前进程直接退出(闪退

Atitit. null错误的设计 使用Optional来处理null

Atitit. null错误的设计 使用Optional来处理null 然后,我们再看看null还会引入什么问题. 看看下面这个代码: String address = person.getCountry().getProvince().getCity(); 如果你玩过一些函数式语言(Haskell.Erlang.Clojure.Scala等等),上面这样是一种很自然的写法.用Java当然也可以实现上面这样的编写方式. 但是为了完满的处理所有可能出现的null异常,我们不得不把这种优雅的函数编程

外传三 动态内存申请的结果

问题: 动态内存申请一定成功吗? 问题: new语句中的异常是怎么抛出来的? 一般我们会在new_handler函数中进行内存的整理,整理之后再次申请. 问题: 如何跨编译器统一new的行为,提高代码移植性? 全局定义new就是全局new操作符的重载. 最后两种方法是推荐的做法. 使用nothrow时,new失败了会返回空指针. 示例程序: 1 #include <iostream> 2 #include <new> 3 #include <cstdlib> 4 #in