天天看點

避免空指針的 5 個案例

什麼是空指針?

當一個變量的值為 null 時,在 Java 裡面表示一個不存在的空對象,沒有實際内容,沒有給它配置設定記憶體,null 也是對象成員變量的預設值。

是以,一個對象如果沒有進行初始化操作,這時候,如果你調用這個對象的方法或者變量,就會出現空指針異常。

如下面示例會發生空指針異常:

Object object = null;

String string = object.toString();

避免空指針的 5 個案例

從類結構圖來看,空指針它是屬于運作時異常 RuntimeException 的子類,它不是捕獲型的,隻有在程式運作時才可能報出來,而且會造成程式中斷。

什麼是運作時異常及異常的分類請看這篇文章:一張圖搞清楚 Java 異常機制。

如何避免空指針?

下面說幾個空指針的幾個最常見的案例及解決之道。

1、字元串比較,常量放前面

if(status.equals(SUCCESS)){

}

這個時候 status 可能為 null 造成空指針異常,應該把常量放前面,就能避免空指針異常。

if(SUCCESS.equals(status)){

這個應該在各種開發規範裡面都會提到,也是最基礎的。

2、初始化預設值

在對象初始化的時候給它一個預設值或者預設構造實作,如:

User user = new User();

String name = StringUtils.EMPTY;

3、傳回空集合

在傳回一個集合的話,預設會是 null,統一規範傳回一個空集合。

舉個 List 例子,如:

public List getUserList(){

    List list = userMapper.gerUserList();

    return list == null ? new ArrayList() : list;

這樣接收方就不用擔心空指針異常了,也不會影響業務。

4、斷言

斷言是用來檢查程式的安全性的,在使用之前進行檢查條件,如果不符合條件就報異常,符合就繼續。

Java 中自帶的斷言關鍵字:assert,如:

assert name == null : "名稱不能為空";

輸出:

Exception in thread "main" java.lang.AssertionError: 名稱不正确

不過預設是不啟動斷言檢查的,需要要帶上 JVM 參數:-enableassertions 才能生效。

Java 中這個用的很少,建議使用 Spring 中的,更強大,更友善好用。