前言
-
空指標例外在開發中可謂是防不勝防,對于這類例外,預防勝于治療,那么如何能夠有效的預防呢?今天陳某來聊一聊如何預防空指標的例外,
什么是空指標?
-
當一個變數的值為 null 時,在 Java 里面表示一個不存在的空物件,沒有實際內容,沒有給它分配記憶體,null 也是物件成員變數的默認值,
-
所以,一個物件如果沒有進行初始化操作,這時候,如果你呼叫這個物件的方法或者變數,就會出現空指標例外,
-
如下面示例會發生空指標例外:
Object object = null; String string = object.toString();
-
關于例外的分類,什么是運行時例外,什么是編譯時例外,這里不再贅述,未了解的朋友可以查閱相關的文章,這個在初級面試中還是比較常問的一類問題,
如何避免空指標例外?
-
下面說說幾個預防空指標的方案,
字串比較,常量放在前面
-
對于初級開發者這是個最常見的坑,老司機基本都知道,示例如下:
if(status.equals("success")){ ? }
-
上述代碼中,如果
status為null將會拋出空指標例外,一種避免的方法就是將常量放在前面,如下:
if("success".equals(status)){ ? }
使用null安全的方法庫
-
作為Java開發者,用的最多的就是Apache的StringUtils,其中的許多方法使用很方便并且不用擔心空指標例外,比如StringUtils.isBlank(),isNumeric(),isWhiteSpace(),
初始化默認值
-
在給物件初始化的時候給他一個默認值或者默認的構造實作,如下:
User user = new User(); String name = StringUtils.EMPTY;
回傳空集合
-
在回傳集合的時候如果是null,統一默認回傳一個空集合,如下:
public List getUserList(){ List list = userMapper.gerUserList(); return list == null ? new ArrayList() : list; }
-
此時方法呼叫者將不會擔心空指標例外了,
斷言
-
斷言是用來檢查程式的安全性的,在使用之前進行檢查條件,如果不符合條件就報例外,符合就繼續,
-
Java 中自帶的斷言關鍵字:assert,如:
assert name == null : "名稱不能為空";
-
除了Java自帶的斷言,可以使用一些方便的開源庫或者自己實作,具體根據開發要求,
Optional
-
Optional 是 JDK 8 新增的新特性,再也不用 != null 來判斷了,這個在一個物件里面的多個子物件連續判斷的時候非常有用,
-
Optional非常強大,想要熟練的使用還是要下一番功夫的,篇幅較大,這里不再細說,想了解的朋友可以查閱相關的文章,這里簡單的舉個例子,如下:
String version = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
避免你的代碼中不必要的自動包裝和自動解包
-
不管其他如創建臨時物件的缺點,如果wrapper類物件是null,自動包裝同樣容易導致空指標例外,例如如果person物件沒有電話號碼的話會回傳null,如下代碼會因為空指標例外崩潰,
Person ram = new Person("ram"); int phone = ram.getPhone();
-
當使用自動包裝和自動解包的時候,不僅僅是等號,< > 同樣會拋出空指標例外,你可以通過這篇文章來學習更多的Java中的自動包裝和拆包的陷阱,
定義資料庫中的欄位是否可為空
-
作為Java開發者,一切的業務都離不開資料庫,表中的欄位定義不允許為null能夠有效的避免代碼中的空指標例外,
總結
-
本篇文章講了在實際開發中避免空指標的幾種切實可行的幾種方法,喜歡的朋友們點點在看,歡迎轉發,謝謝支持!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/174384.html
標籤:Java
