谈谈 Java8-18 引入的新特性
Java8 于 2014 年 3 月 18 日发布,截止到 2022 年 4 月 6 日,当前最新发行版本是 Java18。版本 17、11 和 8 是目前支持的长期支持(LTS)版本。这篇文章带领大家回顾从 Java 8 开始每个版本的特性,小板凳坐好,发车了!
版本概览
Java8 LTS 上一次商业用途的免费软件公共更新是在 2019 年 1 月由 Oracle 发布的,而 Oracle 继续更新并发布免费的公共 java8,用于开发和个人用途。java7 不再受公众支持。对于 java11,Oracle 不会为公众提供长期支持; 相反,更广泛的 OpenJDK 社区,如 Eclipse Adoptium 或其他社区,将会替代 Oracle 提供这类的支持。
上图展示了从 Java SE 8 开始到 Java SE 18 的历史版本发布过程,秉着 2017 年 9 月,Java 平台的首席架构师 Mark Reinhold 提议将发布列车改为“每六个月发布一个特性”的约定,也给出了未来到 Java SE 21 的发布规划。
Java18 的一般可用性开始于 2022 年 3 月 22 日,最新的(第三次) LTS Java 17 开始于 2021 年 9 月 14 日。java19 正在开发中,早期访问构建已经可用。
Java 8 特性
Lambda 表达式允许我们使用函数作为方法参数。
让我们来看看 Java 8 之前的代码,当时我们必须创建一个匿名类来实现一个简单的接口。
使用 lambda 表达式,我们可以这样做。
函数接口是只有一个抽象方法的接口。此外,Interface 可以有默认方法和静态方法,但只有一个抽象方法。
Stream 是java.util.Stream
包中的一个接口,它提供了对集合执行顺序和并行操作的方法。Collection Interface 的 Stream ()方法返回给定集合的类型为 Stream 的元素流。流接口支持过滤、映射或查找流中元素的聚合结果所需的许多操作。
在下面的实例,我们调用 List 上的 stream ()方法,然后将 Predicate (Functional Interface)传递给返回布尔值的 anyMatch ()方法。
Optional 可创建一个容器对象,该对象可能包含也可能不包含非空值,通过使用 它,我们可以 isPresent ()来检查一个值是否为非空。
在下面的示例中,我们使用 Stream Interface 的 findAny ()方法返回一个 Optional 对象。基于可选实例的值,我们可以执行相应的逻辑。
对 java.util.concurrent 包的更改:
引入了 Interface CompletionStage、 Class CompletableFuture 和 CompletionException。
CompletableFuture 可以帮助执行异步任务,这些任务比在 java8 之前存在的 Future 对象更加灵活和增强。
Method References (::) ,我们可以使用双冒号来调用现有的方法,而不是使用 lambda 表达式。方法引用可以用来引用静态方法和实例方法。
下面演示一个引用静态方法的示例。首先,让我们使用 lambda 表达式实现一个方法调用。
isEqual ()是 Main 类中的一个静态方法,因此我们可以简单地使用方法引用来完成工作,而不是使用 lambda 表达式来调用该方法。
篇幅有限,除了上面讲到的新特征,还有几个重要的,包括当不限于:
Parallel Array Sorting (并发数组排序)
Date & Time API (日期和时间操作接口,LocalDate,ZoneId,Clock)
Base64 encoding and decoding (Base64 编码和解码自支持)
Permanent Generation(Metaspace 将根据我们在运行时的需求来重新调整本身)
未完待续,下面继续讲各个版本的新特性,敬请期待!
最后
如果你觉得此文对你有一丁点帮助,点个赞。或者可以加入我的开发交流群:1025263163 相互学习,我们会有专业的技术答疑解惑
如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点 star:http://github.crmeb.net/u/defu不胜感激 !
完整源码下载地址:https://market.cloud.tencent.com/products/33396
PHP 学习手册:https://doc.crmeb.com
技术交流论坛:https://q.crmeb.com
评论