Java14将于3月17日发布,我却仍在使用Java6

Java14将于3月17日发布,我却仍在使用Java6

Java14将于3月17日发布,我却仍在使用Java6

Java14 计划于3月17号发布,据了解这一版本包含的JEP比 Java12和Java13的总和还要多。那么,对于事必躬亲的码农来说,哪些东西能让我们心神荡漾,值得关注呢,简单了解下吧?

吐槽君:现公司基于jdk1.6的leopard的老项目仍在维护开发,甚至源码都不全,每次都要反编译开发,这很码农(⊙﹏⊙)。

本文将着重而又简单介绍以下这些 Java 新特性:

敲黑板划重点

1、改进的 switch 表达式

2、instanceof 的模式匹配

3、NullPointerException(JVM特性)

Java14将于3月17日发布,我却仍在使用Java6

NO1:switch 表达式

在 Java 14 中,switch 表达式是一个正式的特性。相比之前的两个 Java 版本中,这个特性有所改进。

新的 switch 表达式有助于减少 bug,因为它的表达和组合方式更容易编写。例如,下面的示例:

<code>var log = switch (event) {
case PLAY -> "User has triggered the play button";
case STOP, PAUSE -> "User needs a break";
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield "Unknown event " + message +
" logged on " + now;
}
};/<code>

注:Java 10中引入var作为局部变量声明的类型,如下所示:

var user=new ArrayList<user>();/<user>

NO2:instanceof 的模式匹配

Java 14引入了一个预览特性,有了它就不再需要编写先通过instanceof判断再强制转换的代码了,简单而又明了。例如,下面的代码:

<code>if (obj instanceof User) {    
User user = (User) obj;   
var name = user.getName();
}
//利用这个预览特性可以重构为:if (obj instanceof User user) { var name = user.getName();}/<code>

NO3:NullPointerException(JVM特性)

俗话说10个bug9个null,还有一个要随缘。甚至有人说,开发的第一个程序是"Hello World",码出的第一个bug是NullPointerException,它们都是码农生涯的必经之路。

咳咳,转回正题,NullPointerException 确实让人抓狂,它们经常出现在生产环境的日志里,但调试起来很困难。例如,下面这段代码:

<code>// 当然实际开发最好做好null处理
var name = user.getLocation().getCity().getName();/<code>

一行代码里连续调用了多个方法,它们都有可能返回null,而 user 也可能为 null。所以,无法一眼看出是什么导致了 NullPointerException。

同时Java14之前,你可能会得到如下的错误:

<code>Exception in thread "main" java.lang.NullPointerException 
at NullPointerExample.main(NullPointerExample.java:1)/<code>

因此,无法判断具体是谁导致了NullPointerException。

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


<code>Exception in thread "main" java.lang.NullPointerException: 
Cannot invoke "Location.getCity()" because
the return value of "User.getLocation()" is nullat
NullPointerExample.main(NullPointerExample.java:1)/<code>

该消息就很明确,无需再远程debug就搞定了。当然这个需要配置,如下所示:

<code>java-XX:+ShowCodeDetailsInExceptionMessages NullPointerExample/<code>

上述只是空指针异常的一个例子,其他可能会导致NullPointerException的地方也有效,例如字段访问、数组访问、赋值等等。
最后当然,此次Java14仍有些其他比较有趣新的特性发布,各位可以自行学习(虽然我是肯定用不上)。例如下述所示:

文本块

在 Java 14 中,该特性增加了两个转义字符。一个是\\s,用来表示单空格。一个是反斜杠\\,用在行末表示不换行。如果你有一个很长的字符串,为了让代码看起来更好看,但又不希望真的换行,就可以使用这个转义字符。

记录类(Record)

另一个特性是“记录”。该特性主要是为了降低 Java 实体的“啰嗦”程度,让开发者写出更简洁的代码。这个特性主要针对在POJO类上,效果类似于lombok;

总结

Java 14延续以往的发布路线,针对现有java提供了几个新的语言特性和更新,能更好的提高开发者完成日常工作。虽然我们工作中未必使用,但是了解新特性也可以大致判断出java语言甚至其他编程语言的发展路线,对我们个人也是大有裨益。


分享到:


相關文章: