發表文章

目前顯示的是有「開發概念類-基本功-NPE 低級錯誤」標籤的文章

自救必看三大準則

記住這 7 條,從此告別 NullPointerException NPE 低級錯誤

圖片
  無處不在的 NPE 有開發經驗的人都知道 Java 中的空指針異常 NullPointerException(NPE),當我們試圖使用一個值為 null 的對象引用時,就會拋出這個異常。 public class NpeDemo{ public static void main(String[] args){ NpeDemo npeDemo = null; npeDemo.go(); } } 當執行上面的程序的時候,就會報NPE: Exception in thread "main" java.lang.NullPointerException at NpeTest.main(NpeTest.java:4) 像上面這樣的簡單方法,我們根據堆棧信息,很快就能找到問題所在。但是實際開發中,空指針可謂無處不在,一不小心就會踩坑,而且有些 NPE 是 潛伏在程序當中 的,只有遇到某些特殊情況時才會出現, 很難測出來 。 那麼,我們要 如何儘量避免 NPE 的發生 呢?總結起來,有以下 7 條,值得收藏! 一、意識:調用方法時記得判空 這其實是句 正確的廢話 !寫 Java 的人都知道使用對象時有可能會出現空指針,所以 「最好都要記得」 判空,但關鍵是,如果都能記得的話,NPE 就不會那麼難纏了。而且有些情況下,NPE 隱藏得很深,往往是在真正出問題的時候才會被發現。 提高判空意識,養成判空的直覺和習慣,肯定是最理想的解決方式 。但是理想很性感,現實很骨感,人是不可靠的,因此我們可以 藉助工具 來監督我們。 IDEA,就是一個非常不錯的幫手,上面那段代碼在 IDEA 的視角下,是這樣的: IDEA的空指針警告 像這種 低級的錯誤 ,IDEA 會著重提醒你: 此處有 NPE 出沒,請格外小心 !養成看警告的習慣比養成判空的習慣更容易些。 二、 equals 方法 我們經常需要 判斷兩個對象是否相等 (equals),此時,我們可能會這麼做: public String maybeNull(String word, String defaultVal) { // don't do this! if (word.equals("haha")) { return defa...