zoukankan      html  css  js  c++  java
  • JEP 358: 友好的空指针异常

    JEP 358: 友好的空指针异常

    引入

    NullPointerException是Java开发中经常会遇到的异常。在JDK 14之前的版本中,NullPointerException异常的消息只是简单的null,并不会告诉你任何有用的信息,只能根据异常产生的源文件的行号来查找。对于很长的引用链来说,很难定位到底是哪个对象为null。比如,类似a.b.c.d这样的引用方式,abc中的任何一个为null,都会出现NullPointerException异常。仅靠行号无法快速定位问题所在。

    在下面的代码中,对p.address.go();的调用会出现NullPointerException异常。

     直接运行该文件的错误信息如下所示,从中我们只可以知道错误出现在6行,但是并不清楚错误的具体对象是谁为null

    详解

    JEP 358增强了对NullPointerException异常的处理,可以显示详细的信息。这个功能需要通过选项-XX:+ShowCodeDetailsInExceptionMessages启用,如下所示:

     

    "C:Program FilesJavajdk-14injava.exe" -XX:+ShowCodeDetailsInExceptionMessages --enable-preview "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2020.1libidea_rt.jar=49863:C:Program FilesJetBrainsIntelliJ IDEA 2020.1in" -Dfile.encoding=UTF-8 -classpath C:UsersAdministratorIdeaProjectsjdk_14outproductionjdk_14;C:UsersAdministrator.m2
    epositoryjunitjunit4.12junit-4.12.jar;C:UsersAdministrator.m2
    epositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar com.topcheer.jdk14.Test
    Exception in thread "main" java.lang.NullPointerException: Cannot invoke "com.topcheer.jdk14.Address.go()" because "p.address" is null
    	at com.topcheer.jdk14.Test.main(Test.java:6)
    
    Process finished with exit code 1
    

    细示例

    接下来我们来示范一下如下的情况下:a.i = b.j

    Exception in thread "main" java.lang.NullPointerException: Cannot read field "j" because "b" is null
    	at com.topcheer.jdk14.Test.main(Test.java:7)
  • 相关阅读:
    [经典SQL语句]根据父级ID查找所有子级ID,并将所有ID用逗号隔开返回
    小程序页面之间传值
    微信小程序样式wxss各种问题总结(不断更新)
    产品经理--用户体验设计
    linux(centos)下为php添加添加GD扩展
    discuzx3.2发帖流程
    linux(centos)下配置nginx配置文件nginx.conf显示语法高亮
    Mysql关于字段的操作(记录)
    Mysql为表字段添加索引(记录)
    laravel-admin报错: Driver [] is not supported.
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12790760.html
Copyright © 2011-2022 走看看