Java 14 来势汹汹,这回让空指针无处遁形!!
相信在坐的每一位 Java 程序员都遇到过空指针异常: NullPointerException(NPE),不甚其烦。
栈长之前也分享几篇避免空指针的文章:
空指针异常神鬼莫测,它几乎可以出现在程序中的任何位置,想尝试捕获处理是不太切实际的。
背景
我们一般要通过 JVM 异常报告的代码位置去处理,JVM 会打印出导致空指导异常的详细类名、方法名以及行号,如以下异常所示:
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:3)
很显然,Test 类的 main 方法第 3 行发生了空指针异常,如果第 3 行的代码是:
javastack.name = '栈长';
这时候我们肯定能判定 javastack 对象为 null,如果是下面这段呢:
javastack.name = params.user.name;
以下这 e 个对象都可能为空:
- javastack
- params
- user
这时候就无法通过 JVM 报告的位置所判定到底是哪个变量为空了,每一个对象都可能是空指针的入口,只能通过输出日志或者 Debug 调试去跟踪了。
如果 JVM 可以提供足够明确的信息以显示空指针异常的具体来源,而无需额外的代码、工具来定位,那么这对开发人员、或者线上问题定位都举足轻重。当然,这个在商业 JVM 早就做到了,Java 14,它现在也终于来了。
详细的空指针异常信息
详细可以看官方这篇介绍:
Exception in thread "main" java.lang.NullPointerException:
Cannot read field "name" because "params.user" is null
at Test.main(Test.java:3)
如上所示,会给出详细的发生空指针异常变量路径。
另外,如果是下标式访问的赋值语句,如 a[i][j][k] = 2020; 抛出空指针,那会是这样的:
Exception in thread "main" java.lang.NullPointerException:
Cannot load from object array because "a[i][j]" is null
at Test.main(Test.java:18)
注意:在同一行上显示异常类型、异常消息会导致行很长,所以为了保持可读性,会在第二行显示详细异常信息。
另外,这个功能在 Java 14 默认情况下是不开启的,可以使用以下 JVM 参数进行切换:
开启:-XX:+ShowCodeDetailsInExceptionMessages
关闭:-XX:-ShowCodeDetailsInExceptionMessages
为什么现在默认不开启?
1)性能
如果应用程序频繁地抛出并打印异常堆栈消息,势必会带来一定的开销、影响性能,所以应尽量避免这种开销。
2)安全
这个会导致更多源代码的暴露,如果这个不能接受,则不应由 JVM 配置应用程序打印,而应捕获并丢弃。
3)兼容性
过去的 JDK 都是不打印详细空指针异常信息的,JVM 相关工具要依赖于异常消息的准确格式,有可能会存在兼容性问题。
所以,这个特性暂时默认是关闭的,在未来不久的版本中会默认开启。
好了,今天就到这了,关注微信公众号:Java技术栈,新特性实战陆续更新中,公众号第一时间推送。历史 Java 8 - 14 新特性教程可以在公众号回复 java 获取。
栈长原创和整理不易,觉得文章不错,在看、转发分享给更多的朋友们,总能帮助有需要的人,大家一起流弊~
推荐去我的博客阅读更多:
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
觉得不错,别忘了点赞+转发哦!
Java 14 来势汹汹,这回让空指针无处遁形!!的更多相关文章
- Java 14 祭出代码简化大器,Lombok 要被干掉了?
Java 14 3 月发布距现在已经发布 2 个多月,发布了很多新特性,详细的新特性介绍可以看这篇文章: http://www.javastack.cn/article/2020/java14-has ...
- Java 14带来了许多新功能
本文是作者翻译自java magazine的文章,我也将回持续的关注java的最新消息,即时和大家分享.如有翻译不准确的地方,欢迎大家留言,我将第一时间修改. Java 14包含比前两个发行版更多 ...
- Java安全之反序列化回显研究
Java安全之反序列化回显研究 0x00 前言 续上文反序列化回显与内存马,继续来看看反序列化回显的方式.上篇文中其实是利用中间件中存储的Request 和Response对象来进行回显.但并不止这么 ...
- Java安全之挖掘回显链
Java安全之挖掘回显链 0x00 前言 前文中叙述反序列化回显只是为了拿到Request和Response对象.在这里说的的回显链其实就是通过一连串反射代码获取到该Request对象. 在此之前想吹 ...
- Java 14 新功能介绍
不做标题党,认认真真写个文章. 文章已经收录在 Github.com/niumoo/JavaNotes 和未读代码博客,点关注,不迷路. Java 14 早在 2019 年 9 月就已经发布,虽然不是 ...
- java判断字符串是否回文
java判断字符串是否回文 /** * java判断字符串是否回文<br><br> * 基本思想是利用字符串首尾对应位置相比较 * * @author InJavaWeTrus ...
- Java 14 可能带来什么新特性?
JDK/Java 13 在一个月前已经发布,该版本带来了 5 大新特性,笔者观察到其中的 Text Blocks(文本块)特性似乎被讨论最多. 文本块特性与常见的 Python "" ...
- Java 14 都要来了,为什么还有这么多人固守Java8?
作者:刘欣 从Java 9开始,Java版本的发布就让人眼花缭乱了. 每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份, ...
- Java 14 令人期待的 5 大新特性,打包工具终于要来了
随着新的 Java 发布生命周期的到来,新版本预计将于 2020 年 3 月发布,本文将对其中的 5 个主要特性作些概述. Java 13刚刚发布给开发人员使用不久,最新版本的JDK于2019年9月发 ...
随机推荐
- Docker镜像拉取慢的解决方法
镜像加速器配置: 下文配置引用于阿里云说明文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 1. 安装/升级Docker客户 ...
- Ubuntu16.04下安装搜狗输入法及实现中英文转换问题
1.问题描述 版本信息:Ubuntu16.04 解决问题:搜狗输入法的安装 2.解决办法 STEP1:搜索搜狗输入法for Linux --> 选择64bit --> 下载得到一个sogo ...
- PIGS POJ - 1149网络流(最短增广路---广搜) + 建图
题意: 第一行输入m和n,m是猪圈的数量,n是顾客的数量,下面n行 第 i+1行表示第i个顾客 , 输入第一个数字表示有几把猪圈的钥匙,后面输入对应的猪圈,最后一个数字输入顾客想买几头猪. 建图: 设 ...
- coding++:Semaphore—RateLimiter-漏桶算法-令牌桶算法
java中对于生产者消费者模型,或者小米手机营销 1分钟卖多少台手机等都存在限流的思想在里面. 关于限流 目前存在两大类,从线程个数(jdk1.5 Semaphore)和RateLimiter速率(g ...
- Python第三方包之pretty-errors
Python第三方包之pretty-errors 发现了一个第三方好用的python包,这个包可以让我们在面对冗长的错误时候能够一眼看到重点 安装方式 pip install pretty-error ...
- CodeForces 277A 红娘问题(并查子集)
题目链接 思路如下 这题可以普通的并查集来做,我们把每个人认识的红娘,放到一个同一个集合里面,然后通过 for循环 遍历出现过的编号,看总共有几个集合,当集合的个数大于1的时候,需要的话费rmb的数量 ...
- centos8系统下docker安装jenkins
前提是已经安装好docker 1.下载jenkins(最新版本) docker pull jenkins/jenkins 2.创建用于存放jenkins的文件夹 mkdir /home/var/jen ...
- 1033 To Fill or Not to Fill (25分)(贪心)
With highways available, driving a car from Hangzhou to any other city is easy. But since the tank c ...
- 1028 List Sorting (25 分)
Excel can sort records according to any column. Now you are supposed to imitate this function. Input ...
- app测试的一些较为重要的测试点
安装测试 从不同的手机所自带的不同的版本的软件商城里面下载抖音并安装查看是否成功 安装后是否能正常运行安装后的文件和文件夹是否写到了指定的目录里 安装过程中取消安装,安装的文件是否在指定的目录里 安装 ...