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