最近Java14发布了,这是Java目前最新的版本,同样更新了很多内容。让我们来看看更新了什么吧。
instanceof模式匹配
Java在前几个版本中引入了模式匹配的功能,在最新的Java14中,现在instanceof运算符也支持模式匹配了。
原来使用instanceof运算符需要下面这样的形式:
if (obj instanceof String) { String str = (String) obj; // need to declare and cast again the object .. str.contains(..) ..}else{ str = ....}而现在可以使用更加简单的语法来判断变量的类型,无需多余的类型转换。
if (!(obj instanceof String str)) { .. str.contains(..) .. // no need to declare str object again with casting} else { .. str....}更易读的空指针异常
在Java中空指针异常是一件非常常见的事情,现在JVM提供了更加易读的空指针异常信息,显示了更多的有用信息,帮助开发者迅速定位到空指针异常的实际发生位置。
假设有如下的赋值语句。
a.b.c.i = 99;那么JVM会提供非常详细的异常信息,告诉我们到底哪个变量是空的。
Exception in thread "main" java.lang.NullPointerException: Cannot read field 'c' because 'a.b' is null. at Prog.main(Prog.java:5)正式版switch表达式
在Java12和13中引入了switch表达式这个特性,但是一直是预览版的,现在这项特性在Java14中已经变为正式特性了,可以放心使用了。
举个例子,在原来的Java中需要下面这样冗长的写法。
int numLetters;switch (day) { case MONDAY: case FRIDAY: case SUNDAY: numLetters = 6; break; case TUESDAY: numLetters = 7; break; case THURSDAY: case SATURDAY: numLetters = 8; break; case WEDNESDAY: numLetters = 9; break; default: throw new IllegalStateException("Wat: " + day);}
现在代码可以大幅简化成下面的样子。
int numLetters = switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> 9;};打包工具(孵化阶段)
现在Java的打包工具jpackage提供了新功能,可以很方便的将jar包打包为系统专用的安装包,在linux上是deb和rpm,在macOS上是pkg和dmg,在Windows上是msi和exe。
Records(预览阶段)
现在Java终于也有类似Kotlin的data class这样的数据类了,我们只需要声明Records的字段,各种工具方法就会自动生成。Lombok也终于可以退休了。
举个例子,原来我们要编写一个很长的类。
final class Point { public final int x; public final int y; public Point(int x, int y) { this.x = x; this.y = y; } // toString、equals、hashCode等方法省略}现在仅需要一行声明即可。
record Point(int x, int y) { }当然Records也有一些限制,不能继承其他类,也不能是抽象类,所有字段都是final的。
多行字符串
这也是一个千呼万唤的功能,Java现在也支持多行字符串了。语法类似Python,连续三个双引号即可定义多行字符串。
原来要实现多行字符串只能不停的用加号连接。
String html = "\n" + "
\n" + "
Hello, world
\n" + " \n" + "\n";现在舒服了。
String html = """
Hello, world
""";垃圾回收器的变化
现在Java14已经移除了CMS(并发标记清理)垃圾收集器。同时ZGC现在在macOS和Windows已经是可用状态了,之前它仅仅在Linux上可用。
另外还有一些特性,有些冷门,我就不介绍了。大家有兴趣可以参考下面的地址。
https://www.techgeeknext.com/java/java14-features#jesJava14下载地址
在AdoptOpenJDK网站上,大家可以找到各种OpenJDK的下载。这也是我推荐大家下载的。较新版本的OpenJDK和OracleJDK几乎没有区别,基本不需要担心兼容性问题。而使用OpenJDK没有任何商业限制,大家可以放心下载。
https://adoptopenjdk.net/releases.html
当然在开源中国上我还看到了一位朋友做的JDK下载镜像,国内的朋友可以用极快的速度来下载。这个镜像做的比较全,包含了各式各样的JDK,基本可以满足大家的需求。