2

现代 Java(0):前言

 9 months ago
source link: https://www.bennyhuo.com/2023/09/04/Java-New-00-foreword/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

现代 Java(0):前言

2023-09-042023-09-25 114 2k 4 分钟

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);前腾讯高级工程师,现就职于猿辅导


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK