Java14新特性:增强NPE NullPointerException 错误推断


改进 NullPointerExceptions,通过准确描述哪些变量为 null 来提高 JVM 生成的异常的可用性。该提案的作者希望为开发人员和支持人员提供有关程序为何异常终止的有用信息,并通过更清楚地将动态异常与静态程序代码相关联来提高对程序的理解。

String name = user.getLocation().getCity().getName();

在Java 14之前,你可能会得到如下的错误:

Exception in thread "main" java.lang.NullPointerExceptionat NullPointerExample.main(NullPointerExample.java:2)

不幸的是,如果在第2行是一个包含了多个方法调用的赋值语句(如getLocation()和getCity()),那么任何一个都可能会返回null。实际上,变量user也可能是null。因此,无法判断是谁导致了NullPointerException。

在Java 14中,新的JVM特性可以显示更详细的诊断信息:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Location.getCity()" 
because the return value of "User.getLocation()" is null at NullPointerExample.main(NullPointerExample.java:2)

该消息包含两个明确的组成部分:

  • 后果:Location.getCity()无法被调用
  • 原因:User.getLocation()的返回值为null

文章作者: 少年闰土
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 少年闰土 !
评论
 上一篇
Java14新特性:增强 instanceOf 类型推断 Java14新特性:增强 instanceOf 类型推断
Java中instanceof是用来判断对象的类型是否是目标类型。如果是返回true,不是返回false。 在Java 14之前,示例如下: if (obj instanceof String) { String str = (
2020-03-14
下一篇 
Java 中 IO 流 Java 中 IO 流
Java 中 IO 流分为几种? 按照流的流向分,可以分为输入流和输出流; 按照操作单元划分,可以划分为字节流和字符流; 按照流的角色划分为节点流和处理流。 Java Io 流共涉及 40 多个类,这些类看上去很杂乱,但实际上很有规则,而
2020-03-12
  目录