现代 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 82014.32030.12函数式
Java 112018.92026.9局部变量类型推导
Java 172021.92029.9模式匹配(Pattern Match)
Java 212023.92031.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);前腾讯高级工程师,现就职于猿辅导