Java 陷阱 - Nulls 和 NullPointerException

null 是型別為引用型別的欄位的未初始化值的預設值。

NullPointerException(或 NPE)是當你嘗試對 null 物件引用執行不適當的操作時引發的異常。這些行動包括:

  • null 目標物件上呼叫例項方法,
  • 訪問 null 目標物件的欄位,
  • 嘗試索引 null 陣列物件或訪問其長度,
  • 使用 null 物件引用作為 synchronized 塊中的互斥鎖,
  • 轉換 null 物件參考,
  • 拆箱 null 物件參考,和
  • 丟擲 null 物件引用。

NPE 最常見的根本原因:

  • 忘記用引用型別初始化欄位,
  • 忘記初始化引用型別陣列的元素,或
  • 在某些情況下,不測試指定為返回 null 的某些 API 方法的結果。

返回 null 的常用方法示例包括:

  • Map API 中的 get(key) 方法如果使用沒有對映的鍵呼叫它,將返回 null
  • 如果無法找到資源,ClassLoaderClass API 中的 getResource(path)getResourceAsStream(path) 方法將返回 null
  • 如果垃圾收集器已清除引用,則 Reference API 中的 get() 方法將返回 null
  • 如果你嘗試獲取不存在的請求引數,會話或會話屬性等,Java EE servlet API 中的各種 getXxxx 方法將返回 null

有一些策略可以避免不需要的 NPE,例如明確測試 null 或使用 Yoda Notation,但是這些策略通常會在程式碼中隱藏真正應該修復的問題。