jep122_JEP 358 –改进的NullPointerException

jep122

程序和Java应用程序也不例外,通常由许多方法,对象,函数,注释等组成。 在大量的小零件中,一个所谓的NullPointerException(NPE)可能潜伏在任何地方。 几乎不可能用手找到它,但是值得庆幸的是,JVM可以告诉开发人员问题出在哪里。 它指向确切的方法,文件名,甚至是NPE起源的代码行。 像这样:

Exception in thread "main" java.lang.NullPointerException
    at Prog.main(Prog.java:5)

此错误消息属于代码行ai = 99; –但是如果代码变得更加复杂,由多个变量组成(例如, abci = 99; ),该怎么办? 然后需要调试工具,因为根据Lindemaier和Schmelter的说法,大多数NPE是在生产环境中创建的。 最终遇到问题的支持工程师通常不是最初编写代码的开发人员,因此,对于他们而言,如果没有其他工具,则很难找到错误。

还请参见:

上述问题是JEP 358旨在解决的问题。 通过分析程序的字节码指令,JVM应该能够准确显示哪个变量返回空值。 然后,JVM将在NullPointerException中输出一个null-detail消息 ,该消息将与通常的消息一起出现。 它看起来像这样:

Exception in thread "main" java.lang.NullPointerException: 
        Cannot assign field 'i' because 'a' is null.
    at Prog.main(Prog.java:5)

对于更复杂的示例( abci = 99; )的消息将显示如下:

Exception in thread "main" java.lang.NullPointerException: 
        Cannot read field 'c' because 'a.b' is null.
    at Prog.main(Prog.java:5)

JEP的目的是为作者和开发人员提供重要和有用的信息,以进行故障排除。 新的开发人员将不会感到困惑,也不必担心NPE,并且可以提高对给定程序的一般理解。

但是,Lindemaier和Schmelter还指出,该建议将意味着空详细消息可能包含源代码中的变量名-这可能构成安全风险-但忽略变量名将限制其建议的有效性。

有关JEP的更多信息,请参见OpenJDK网站上的正式建议。

翻译自: https://jaxenter.com/java-jep-358-improved-nullpointerexceptions-160882.html

jep122

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值