Java17来了!YYDS!

2021-10-11 11:24:17 浏览数 (1)

上个周末我发了一篇名为:Spring 官宣,干掉 Spring 5.3.x! 的技术快报,这篇文章主要介绍了 Spring Framework 6 和 Spring Boot 3 的最新消息。

我在文中提到说:Spring Framework 6 和 Spring Boot 3 在运行时至少需要 JDK 17 。

就在前天,Oracle 正式宣布推出 Java 17[1]。是的!它来了!

如官方所说:

  • JDK 17 将取代 JDK 11 作为下一个长期支持的 JDK 版本。
  • Java 17 提供了数以千计的性能、稳定性和安全更新,以及 14 个 JEP(JDK 增强建议),进一步改进了 Java 语言和平台,帮助开发人员提高工作效率。

即使你暂时用不到 Java17,我还是建议你一定要多多关注技术最新动态。

目前,国内大部分公司还是坚守 Java8 ,我觉得项目有条件的话,可以尝试使用一下新版本的 JDK。

可能是因为工作比较繁忙的原因,我发现很多人对“新技术”都有一点抵制,大有一种死守 Java8 不放的感觉。果然专一,实属好男人!

不过,大部分人应该都是嘴上说说,等趋势来了,该换还是要换,该学还是要学!嘴上说的好,身体很诚实。

这几年 Java 开发最常用的框架还是 Spring,它几乎没有什么大改。包括,Spring Boot 出来之后也只是让我们使用起来更加简单,学习成本非常低。

你们去看看前端框架更新换代的速度,就知道什么叫做变态了!

说实话。我非常期待这次更新。云原生时代 Java 正在面临前所未有的挑战,是继续辉煌还是成为过去,且看 Java 最新的努力尝试…

一位读者说的挺好 : “学不学,用不用,搁一边。至少得知道趋势是啥!”。

新特性概览

根据官方介绍, Java17 共有 14 个 JEP:

  • 306:恢复始终严格的浮点语义
  • 356:增强型伪随机数发生器
  • 382:新的 macOS 渲染管道
  • 391:macOS/AArch64 平台支持
  • 398:标记删除的 Applet API
  • 403:强封装 JDK 的内部 API
  • 406:Switch 模式匹配(预览)
  • 407:删除 RMI Activation
  • 409:密封类
  • 410:删除实验性 AOT 和 JIT 编译器
  • 411:弃用即将删除安全管理器
  • 412:外部函数和内存 API(孵化器)
  • 414:Vector API(第二次进行特性孵化)
  • 415:特定于上下文的反序列化过滤器

关于新特性和预览特性的详细介绍可以查看 Java17 官方文档介绍[2]

密封类转正

密封类(Sealed Classes)是 Java 15 引入的, Java 17 正式转正。

密封类可以对继承或者实现它们的类进行限制。

比如抽象类 Person 只允许 EmployeeManager 继承。

代码语言:javascript复制
public abstract sealed class Person
    permits Employee, Manager {

    //...
}

另外,任何扩展密封类的类本身都必须声明为 sealednon-sealedfinal

代码语言:javascript复制
public final class Employee extends Person {
}

public non-sealed class Manager extends Person {
}

JDK 内部元素强封装

很多程序员以损害安全性和可维护性的方式使用 JDK 的内部元素比如一些非public类、方法和字段。

为了继续提高 JDK 的安全性和可维护性,默认强封装 JDK 的所有内部元素,从而限制对它们的访问,除了关键的内部 API 如sun.misc.Unsafe

macOS/AArch64 平台支持

由于 JDK 在 macOS/AArch64 的广泛需求,Oracle 宣布将 JDK 移植到 macOS/AArch64 平台,增加了 Apple 去年发布的新 CPU 系列 (M1) 的支持。

标记删除 Applet API

Applet API 提供了一种将 Java AWT/Swing 控件嵌入到浏览器网页中的方法。不过,目前 Applet 已经被淘汰。大部分人应该和我一样,压根就没有用过 Applet。

Java 9 的时候,Applet API 已经被标记为启用,Java 17 的时候终于标记为删除了。

删除 RMI Activation

RMI 即 Remote Method Invocation ,其为 Java 提供了远程方法调用的能力,不过,比较鸡肋,基本不会用到。RMI Activation 为激活分布式对象提供支持,不过,一般也不会用到。

Java 15 的时候, RMI Activation 已经被弃用,Java 17 的时候终于被删除了。

参考资料

[1]

Oracle 正式宣布推出 Java 17: https://www.oracle.com/news/announcement/oracle-releases-java-17-2021-09-14/

[2]

Java17 官方文档介绍: https://openjdk.java.net/jeps/403

< END >

0 人点赞