Java17来了!YYDS!

JavaGuide

共 2922字,需浏览 6分钟

 · 2021-09-18

上个周末我发了一篇名为: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 继承。

public abstract sealed class Person
    permits EmployeeManager 
{

    //...
}

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

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 >

也许你还想看
  | 我在 B 站淘了 2 个 Java 实战项目! 小破站,YYDS!
  | 我常用的20+个学习编程的网站!芜湖起飞!
  | 1w+字的 Dubbo 面试题/知识点总结!(2021 最新版)
  | 7年前,24岁,出版了一本 Redis 神书
  | 京东二面:为什么需要分布式ID?你项目中是怎么做的?
  | 和 Github 在一起 5 年多了......
  | 一键生成数据库文档,堪称数据库界的Swagger
  | 来看看这个超好用的项目脚手架吧!5分钟搭建一个Spring Boot 前后端分离系统!
  | Spring 官宣,干掉 Spring 5.3.x!

我是 Guide哥,一个工作2年有余,接触编程已经6年有余的程序员。大三开源 JavaGuide,目前已经 100k+ Star。未来几年,希望持续完善 JavaGuide,争取能够帮助更多学习 Java 的小伙伴!共勉!凎!点击即可了解我的个人经历

欢迎点赞分享。咱们下期再会!

浏览 64
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报