Java 陷阱 - Nulls 和 NullPointerException
值 null
是型別為引用型別的欄位的未初始化值的預設值。
NullPointerException
(或 NPE)是當你嘗試對 null
物件引用執行不適當的操作時引發的異常。這些行動包括:
- 在
null
目標物件上呼叫例項方法, - 訪問
null
目標物件的欄位, - 嘗試索引
null
陣列物件或訪問其長度, - 使用
null
物件引用作為synchronized
塊中的互斥鎖, - 轉換
null
物件參考, - 拆箱
null
物件參考,和 - 丟擲
null
物件引用。
NPE 最常見的根本原因:
- 忘記用引用型別初始化欄位,
- 忘記初始化引用型別陣列的元素,或
- 在某些情況下,不測試指定為返回
null
的某些 API 方法的結果。
返回 null
的常用方法示例包括:
Map
API 中的get(key)
方法如果使用沒有對映的鍵呼叫它,將返回null
。- 如果無法找到資源,
ClassLoader
和Class
API 中的getResource(path)
和getResourceAsStream(path)
方法將返回null
。 - 如果垃圾收集器已清除引用,則
Reference
API 中的get()
方法將返回null
。 - 如果你嘗試獲取不存在的請求引數,會話或會話屬性等,Java EE servlet API 中的各種
getXxxx
方法將返回null
。
有一些策略可以避免不需要的 NPE,例如明確測試 null
或使用 Yoda Notation
,但是這些策略通常會在程式碼中隱藏真正應該修復的問題。