现代 Java(0):前言
2014 年初 Java 8 就发布了,Java 迎来了其历史上继 5 之后的第二次史诗级更新。我们不妨列举一下 Java 5 和 Java 8 的主要特性来感受一下更新的力度。
Java 5 的主要更新:
- 元数据,即注解(Annotation)。注解特性的引入几乎改变了 Java 开发者的开发习惯,甚至也在很大程度上影响了后来的 Kotlin。
- 泛型(Generics)。泛型的引入使得 Java 的类型系统实现了一次质的飞跃,对于编写类型安全的代码有着重要的意义。
- 并发包(java.util.concurrent)。高并发一直是 Java 开发者极其关注的话题,这也一度成为 Java 最为擅长的开发领域。Java 5 在标准库中引入并发包,极大的方便了并发程序的设计和开发,这个包甚至也成了 Java 面试中最常被问到的内容之一。
Java 8 的主要更新:
- Lambda 表达式。这可能是 Java 迈向现代化的最为重要的一步。Lambda 表达式的支持使得开发者可以极大地简化匿名对象的使用,无论从代码可读性还是从代码简洁性上讲,都是一次质的提升。
- SAM 转换。单一方法类型的匿名实例可以简化成 Lambda 表达式,尽管 Java 没有直接支持函数类型,但所有单一方法的类型都可以认为是函数类型。
- 流(Stream)。Java 8 的标准库中为集合类型提供了对流的支持,常见的流 API 包括 map、filter、reduce 等等。对流的支持使得 Java 更加函数化,对 Java 开发者的开发习惯和编程思维有非常大的影响,也极大的简化了数据的处理过程。
- 接口方法默认实现(Default Methods)。Java 8 开始允许在接口方法中提供默认无状态的实现,这对于 API 的设计者增加新功能且保持 ABI 兼容有着非常大的帮助。
简单来说,Java 5 的发布使得 Java 的元编程能力和并发能力得到了极大的提升,而 Java 8 的发布又为 Java 带来全新的函数式编程能力,让 Java 再度焕发活力。
从 Java 9 开始,Java 的版本更新改为半年一次,LTS 版本则是三年一次。从 Java 17 开始,LTS 版本又改成两年一次。
非 LTS 版本的生命周期只有半年,而 LTS 的生命周期长达 8 年甚至更久。了解 Java 的 LTS 版本是有意义的,一般而言,我们在生产环境中应尽量使用更加有保障的 LTS 版本,以避免频繁地更改生产环境。
说明:事实上,Java 版本的升级除了语法特性的变化以外,还包含了运行环境及 Java 虚拟机的变化。相比之下,Java 虚拟机的变化对于生产环境的调优带来的影响更大、更抽象,这可能是 Java 开发者不愿意升级版本的一个最为重要原因。
Java 的近几个 LTS 版本如下表所示:
版本号 | 发布时间 | 结束支持时间 | 核心特性 |
---|---|---|---|
Java 8 | 2014.3 | 2030.12 | 函数式 |
Java 11 | 2018.9 | 2026.9 | 局部变量类型推导 |
Java 17 | 2021.9 | 2029.9 | 模式匹配(Pattern Match) |
Java 21 | 2023.9 | 2031.9 | 虚拟线程(Virtual Thread) |
需要注意的是,这里提及的核心特性也可能是该 LTS 版本之前的非 LTS 版本中引入的。例如,局部变量类型推导指使用 var 来定义变量,变量的类型通过初始化表达式来推导。该特性在 Java 10 引入,Java 11 中只是对 Lambda 表达式的参数做了支持。
从语法特性的角度来看,Java 17 是非常有诱惑力的。不过,相较难以量化的开发效率上的提升,架构师们往往更看重程序运行效率的提升。我们有理由相信,携带了虚拟线程和分代 ZGC 的 Java 21 将会是一个更加有说服力的版本。
Java 最近几年的更新无疑是令人兴奋和激动的。尽管比起它的最有力的竞争者 Kotlin 而言,Java 在语法特性上仍显得非常保守,但看看 C++ 近几年的更新就可以知道,语言特性的稳健何尝又不是对现存的 Java 开发者的一种友好呢?
接下来,我准备写一系列文章来介绍一下 Java 8 以来的重要语法特性更新,希望可以在一定程度上帮助大家了解现代 Java 的语法特性的发展。
当然,需要特别说明的是,尽管本系列文章的主角是 Java,但行文之处力求把涉及到的问题解释清楚,难免会经常横向对比其他常见的编程语言,读者如果对涉及到的其他语言不熟悉,只需大致了解即可,无须深究。
关于作者
霍丙乾 bennyhuo,Google 开发者专家(Kotlin 方向);《深入理解 Kotlin 协程》 作者(机械工业出版社,2020.6);《深入实践 Kotlin 元编程》 作者(机械工业出版社,2023.8);前腾讯高级工程师,现就职于猿辅导
- GitHub:https://github.com/bennyhuo
- 博客:https://www.bennyhuo.com
- bilibili:霍丙乾 bennyhuo
- 微信公众号:霍丙乾 bennyhuo