美文网首页Java
Java14 真的太香了,NullPointerExceptio

Java14 真的太香了,NullPointerExceptio

作者: 愿天堂没有BUG | 来源:发表于2022-05-04 17:22 被阅读0次

在Java语言中,处理空指针往往是一件很头疼的事情,一不小心,说不定就搞出个线上Bug,让你的绩效考核拿到3.25。

最近新出的Java14,相信大家都有所耳闻,那么今天就来看看,面对NullPointerException,Java14有哪些更好的处理方式呢?

1.传统的 NullPointerException

我们编码过程中呢,经常会使用链式调用的方式来写代码,这样写起来很方便,也很清晰,但是,一旦出现NullPointerException,那就头大了,因为你很难知道异常是在什么时候开始发生的。

举个简单的例子,就比如下面的代码,要找到公司某个员工的户籍所在地,我们这样来调用

在链式调用的过程中,如果employee,getDetailInfos(),或者getRegistryAddress()为空,JVM就会抛出NullPointerException

那么导致异常的根本原因是什么?如果不使用调试器,很难确定哪个变量为空。而且,JVM也只会打印导致异常的方法、文件名和行号,仅此而已。那么下面,我将带大家了解Java 14如何通过JEP 358解决这个问题。

2.增强型 NullPointerException

SAP在2006年为其商业JVM实现了增强型的NullPointerException。2019年2月,它被提议作为OpenJDK社区的一个增强,之后很快,它成为了一个JEP。所以,该功能在2019年10月完成并在JDK 14版本推出

本质上,JEP 358 旨在通过描述某个变量是 “null”来提高 JVM 生成的 “NullPointerException” 的可读性。JEP 358通过在方法、文件名和行号旁边描述为null的变量,带来了一个详细的NullPointerException消息。它通过分析程序的字节码指令来工作。因此,它能够精确地确定哪个变量或表达式是null。最重要的是,JDK 14中默认关闭详细的异常消息。要启用它,我们需要使用命令行选项:


2.1 详细的异常信息

考虑在激活

ShowCodeDetailsInExceptionMessages标志的情况下再次运行代码:

这一次,从附加信息中,我们知道员工的个人详细信息丢失的注册地址导致了我们的异常。从这个增强中获得的信息可以节省我们调试所用的时间。

JVM由两部分组成详细的异常消息。第一部分表示失败的操作,这是引用为null的结果,而第二部分表示了null引用的原因:

为了生成异常消息,JEP 358 重构了将空引用推送到操作数堆栈上的部分源代码。

3. 技术方面

现在我们已经很好地理解了如何使用增强的NullPointerException_s标识 _null引用,让我们来看看它的一些技术方面。

首先,只有当JVM本身抛出一个NullPointerException时,才会进行详细的消息计算,如果我们在Java代码中显示抛出异常,则不会执行计算。原因是因为:在这些情况下,很可能已经在异常构造函数中传递了一条有意义的消息。

其次,**JEP 358 ** 懒汉式地计算消息,这意味着只有当我们打印异常消息时才调用增强的NullPointerException,而不是当异常发生时就调用。因此,对于通常的JVM流程不应该有任何性能影响,在那里我们可以捕获并重新抛出异常,因为咱并不会只想打印异常消息。

最后,详细的异常消息可能包含源代码中的局部变量名。因此,我们可以认为这是一个潜在的安全风险。但是,只有在运行使用激活的-g标记编译的代码时,才会发生这种情况,该标记会生成调试信息并将其添加到类文件中。请考虑一个简单的示例,我们已编译该示例以包含以下附加调试信息:

JVM 打印编译器分配的变量索引,而不是本地变量名(employee)。

关于NullPointerException的处理到这里就结束了,通过Java14增强的NullPointerException,我们可以很快速的定位代码问题的原因所在,更快的调试代码,节约时间,提高效率。

已经安装了Java14的朋友可以试试看哦~

相关文章

  • Java14 真的太香了,NullPointerExceptio

    在Java语言中,处理空指针往往是一件很头疼的事情,一不小心,说不定就搞出个线上Bug,让你的绩效考核拿到3.25...

  • 跑步真的太香了

    今天照例去操场散步,跑着跑着突然发现,自己不怎么喘气了,而且不像前段时间拖着跑了,感觉整个下半身变轻盈了很多! 没...

  • 开车旅行真的太香了

    买了车以后 一直想着开车出去旅行 之前都是睡青旅睡公园的穷游 背着60斤的登山包 腰都快断了 在牛年的最后几天 终...

  • 太香了

  • 腊梅太香了

    君子患无能也, 不患人之不己知。 有香的能力和能量, 到了时机自然会香, 藏都藏不住。 ~~~~ 20151230...

  • Android Jetpack 之 StartUp真的是太香了

    我自己开发的一款填色小游戏, 运用到了很多android技术,欢迎大家到应用市场评论下载安琪花园 Jetpack ...

  • Butterknife避免NullPointerExceptio

    Butterknife使用 在Module下的build.gradle添加jar compile 'com.jak...

  • Java14新特性

    Java14新特性 Java14已如期于2020年3月17日正式发布。这一个版本中主要带来了ZGC增强、insta...

  • JAVA报错

    Java 十大异常报错(Exception) No.1 java.lang.NullPointerExceptio...

  • 真的太怂了

    1 很久很久以前,就想把牙齿矫正,但是很久很久以前,听说矫正费用很贵,也不想让父母负担太多,所以就没打算做。 一直...

网友评论

    本文标题:Java14 真的太香了,NullPointerExceptio

    本文链接:https://www.haomeiwen.com/subject/uzfgyrtx.html