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
,但是这些策略通常会在代码中隐藏真正应该修复的问题。