推荐你从Java8升级到Java17的7个理由~
从Java 8 到 Java 20,Java 已经走过了漫长的道路,自 Java 8 以来,Java 生态系统发生了很多变化。最显着的变化是 Java 的发布节奏。Java 8 于 2014 年发布,Java 17 于 2021 年发布。这两个版本之间相隔了 7 年。Java17是一个长期支持(LTS)的版本,会有更稳定和持久的维护和更新。
如果你和我一样,已经使用Java 8很长时间了,觉得需要了解一下Java的新特性,那么这篇文章就是为你准备的。
自从Java 8以来,Java增加了很多新特性,但并不是所有的特性都有用和受欢迎。所以我整理了一个列表,列出了自Java 8以来Java增加的最受开发者欢迎的特性,你可以用它作为参考来迁移。
这是自 Java 8 以来添加到 Java 中的最受欢迎的功能之一。它允许你在不指定类型的情况下声明局部变量。类型是从表达式的右侧推断出来的。此功能也称为var
类型。
![](https://filescdn.proginn.com/329444a76282423b345b6da55ce3877e/5be7350d56f074ae3005352a7a714987.webp)
在上面的示例中,两个程序将生成相同的输出,但在 Java 10 的情况下,我们使用而var
不是指定类型。
在 Java 14 中使用 switch 表达式时,你不必使用关键字break
来跳出 switch 语句或return
在每个 switch case 上使用关键字来返回值;相反,你可以返回整个 switch 表达式。这种增强的 switch 表达式使整体代码看起来更清晰,更易于阅读。
![](https://filescdn.proginn.com/1d437a3241e6cad3a6cb051b38e2c055/b27b5fe724512cc1a3421a8af312c982.webp)
文本块是 Java 15 中添加的一项新功能。它允许你在不使用转义序列的情况下创建多行字符串。这在你创建 SQL 查询或 JSON 字符串时非常有用。在下面的示例中,你可以看到使用文本块时代码看起来更加简洁。
![](https://filescdn.proginn.com/ffdebc0ebbc883a9140016095e4ec01f/d1c5cfa7ec3d520236d0bdefa06c3961.webp)
记录Records是添加到 Java 14 的一项新功能。它允许你创建用于存储数据的类。它类似于 POJO 类,但代码少得多;大多数开发人员使用 Lombok 生成 POJO 类,但是有了记录,你就不需要使用任何第三方库。在下面的示例中,你可以看到创建记录类所需的代码非常少。
![](https://filescdn.proginn.com/11363342fc5cbb22e270532d507408be/a61beb05283c86b92bdfd5516e361b22.webp)
模式匹配instanceof
是 Java 16 中添加的一项新功能。它允许你将instanceof
运算符用作返回已转换对象的表达式。当你使用嵌套的 if-else 语句时,这非常有用。在下面的示例中,你可以看到我们如何使用instanceof
运算符来捕获Employee
对象,而不是进行显式转换。
![](https://filescdn.proginn.com/d9edc1812e1ddf2a9e35f21c4a9bb582/2d9360c571fb4e19395c60c2bf907c4a.webp)
密封类是添加到 Java 17 中的一项新功能。它允许你将类或接口的继承限制为一组有限的子类。当你想将类或接口的继承限制为一组有限的子类时,这非常有用。在下面的示例中,你可以看到我们如何使用sealed
关键字将类的继承限制为一组有限的子类。
![](https://filescdn.proginn.com/0c145add4659b1416eec7f86ea45adbe/387719f24be5cd2b861b2945088c9ef5.webp)
密封类的子类可以声明为final
或non-sealed
。final 子类不能进一步扩展,而非密封子类可以进一步扩展。
NullPointerExceptions 是 Java 14 中添加的一项新功能。它允许你获取有关NullPointerExceptions
. 这在调试时非常有用NullPointerExceptions
。在下面的示例中,你可以看到相同的代码如何NullPointerExceptions
在 Java 8 和 Java 14 中生成不同的结果,但在 Java 14 中,你可以获得有关异常的更多信息
![](https://filescdn.proginn.com/a4d48e912ce61a1e874babdfac2c1f5a/c737918588da49d11fb8eaec3bae36eb.webp)
我没有介绍自 Java 17 以来添加到 Java 的所有功能,但介绍了最流行的功能。如果你想了解更多关于 Java 的新特性,可以查看下面提供的链接。
参考
-
JDK 10 功能 — https://openjdk.org/projects/jdk/10/ -
JDK 11 功能 — https://openjdk.org/projects/jdk/11 -
JDK 12 功能 — https://openjdk.org/projects/jdk/12 -
JDK 13 功能 — https://openjdk.org/projects/jdk/13 -
JDK 14 功能 — https://openjdk.org/projects/jdk/14 -
JDK 15 功能 — https://openjdk.org/projects/jdk/15 -
JDK 16 功能 — https://openjdk.org/projects/jdk/16 -
JDK 17 功能 — https://openjdk.org/projects/jdk/17