天天看點

Android開發 - 處理 null 和 預防空指針異常(NullPointerException) 的一些經驗概述:原則:一些方法:擴充:添加項目引用參考:

概述:

在實際編碼中總是會遇到 空指針異常 ,本文總結了一些處理空指針的個人經驗。

原則:

盡早的檢查,盡早的失敗。

比如: 通過intent傳參到新的目标 activity,而且一定需要這個參數,那麼在新的目标activity中 onCreate方法中 判斷中這個參數,如果null,直接抛出空指針異常讓程式崩潰。取代在使用該參數時進行檢查,這樣能更早的發現問題。或者在 一個普通的方法中,一個 參數必須不能為null ,那麼我們在這個方法的第一行就做出判斷,如果參數為null,抛出空指針異常。

一些方法:

1.不要在Set中使用null

2.不要把null作為map的鍵值。

3.盡可能的盡早檢查,如果為 null 不執行或者 結束本方法

4.遇到必須的參數,比如通過intent傳參到新的目标 activity,而且一定需要這個參數,那麼在新的目标activity中判斷是否有參數

if(getIntent() == null) throw new NullPointerException("缺少必須的參數");
        if(!getIntent().hasExtra("argument_name")) throw new NullPointerException("缺少必須的參數");           

複制

5.判斷字元串是否空

if(TextUtils.isEmpty(str)){
        //doSometing
    }           

複制

6.對字元串比較時,如果和常量進行比較,把常量放在前面,比如:

“good".equals(var)  優于  var.equals("good")           

複制

7.将某個對象 toString時,比如:

String.valueOf(obj)   優于  obj.toString()           

複制

8.使用注解 @NonNull 和 @Nullable 配合AndroidStudio 幫你檢查你是否沒有檢查可能為null的對象,或者你是否做了多餘的檢查。

9.我們引用Guava來幫忙檢查 null 的情況,我們使用 checkNotNull 方法來替代寫 if( obj == null) throw new NullPointExcetion(); ,示例:

public void print2(@NonNull MyObject act) {
    checkNotNull(act);
    Log.i(TAG, "print2 " + act.name);
}           

複制

擴充:

Guava是什麼:

Guava工程包含了若幹被Google的 Java項目廣泛依賴 的核心庫,例如:集合 [collections] 、緩存 [caching] 、原生類型支援 [primitives support] 、并發庫 [concurrency libraries] 、通用注解 [common annotations] 、字元串處理 [string processing] 、I/O 等等。 所有這些工具每天都在被Google的工程師應用在産品服務中。
Guava工具類對Null值都采用快速失敗操作           

複制

添加項目引用

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile "com.google.guava:guava:18.0"
}           

複制

參考:

http://ifeve.com/google-guava/