# 前言 Java11 及其新特性增加了语言的丰富性,这是构建健壮软件应用程序最常用的编程语言之一。Java11 扩展了 Java 平台的功能。本书是您掌握自 Java9 以来对 Java 平台所做更改的一站式指南。 本书概述并解释了 Java11 中引入的新特性及其重要性。我们将为您提供实用的指导,帮助您将新学到的 Java11 知识以及有关 Java 平台未来发展的信息应用到 Java 平台上。这本书的目的是提高您的生产率,使您的应用程序更快。通过学习 Java 中的最佳实践,您将成为组织中 Java 的准用户。 在本书的结尾,您不仅将学习 Java11 的重要概念,而且还将对使用这种伟大语言编程的重要方面有一个细微的了解 # 这本书是给谁的 本书面向企业开发人员和现有 Java 开发人员。掌握 Java 的基本知识是必要的。 # 这本书的内容 [第一章](01.html)*java11 场景*探讨了 Java 平台上新实现的基于时间的版本控制系统。我们调查了当前的 Java 环境,特别关注 Java9、10(18.3)和 11(18.9)带来的变化。我们的探索包括对 Java9 的模块化、Javashell、外部进程控制、垃圾收集、JHM 等的概述。对于 Java10,我们将重点介绍关键更改,包括局部变量类型推断、JDK 整合、垃圾收集、应用程序类数据共享和根证书等。最后,我们将探讨 Java11 中引入的更改,包括动态类文件常量、垃圾收集和 lambdas 的局部变量类型推断。 [第 2 章](02.html)*发现 Java 11*,关注 Java 平台中引入的几个内部变化,包括 Java 9、10 和 11 的变化。Java 9 代表 Java 平台的主要版本;Java 10 和 11 是定时版本。总的来说,这些版本包含了大量的内部更改,为 Java 开发人员提供了一系列新的可能性,有些源于开发人员的请求,有些源于 Oracle 的增强 [第 3 章](03.html)*Java 11 基础*,介绍了影响变量处理程序的 Java 平台变更、导入语句、Project Coin 改进、局部变量类型推断、根证书、动态类文件常量等。这些表示对 Java 语言本身的更改。 [第 4 章](04.html)*使用 Java11*构建模块化应用程序,分析了 Jigsaw 项目指定的 Java 模块的结构,深入探讨了 Jigsaw 项目作为 Java 平台的一部分是如何实现的。我们还回顾了 Java 平台与模块化系统相关的关键内部更改。 [第 5 章](05.html)*将应用程序迁移到 Java 11*,探讨如何将现有的应用程序迁移到当前的 Java 平台。我们将研究手动和半自动迁移过程。本章旨在为您提供一些见解和过程,使您的非模块化 Java 代码能够在当前的 Java 平台上工作。 [第 6 章](06.html)*实验了 Java Shell*,介绍了新的命令行,Java 中的**Read Eval Print Loop**(也称为**REPL**工具,以及**Java Shell**(**JShell**)。我们从介绍该工具、REPL 概念开始,然后进入 JShell 使用的命令和命令行选项。我们采用实践者的方法来回顾 JShell,并包含一些您可以自己尝试的示例。 [第 7 章](07.html)*利用了默认的 G1 垃圾收集器*,深入研究了垃圾收集及其在 Java 中的处理方式。我们从垃圾收集的概述开始,然后看看 Java9 之前的领域中的细节。有了这些基本信息,我们就来看看 Java9 平台中具体的垃圾收集更改。最后,我们来看一些即使在 Java11 之后仍然存在的垃圾收集问题。 [第 8 章](08.html)*使用 JMH*的微基准应用程序,介绍如何使用**Java 微基准线束**(**JMH**)编写性能测试,这是一个用于为**Java 虚拟机**(**JVM**编写基准测试的 Java 线束库。我们使用 Maven 和 JMH 来帮助说明使用新 Java 平台进行微标记的威力。 [第 9 章](09.html)*利用流程 API*,重点介绍了`Process`类和`java.lang.ProcessHandle`API 的更新。在 Java 的早期版本中,在 Java9 之前,用 Java 管理进程是很困难的。API 不够,有些功能不够,有些任务需要以特定于系统的方式来解决。例如,在 Java8 中,让进程访问自己的**进程标识符**(**PID**)是一项不必要的困难任务。 [第 10 章](10.html)*细粒度堆栈跟踪**ing*,重点介绍 Java 的`StackWalker`API。API 支持普通程序很少需要的特殊功能。API 在一些非常特殊的情况下非常有用,比如框架提供的功能。因此,如果您想要一种有效的堆栈遍历方法,使您能够对堆栈跟踪信息进行可过滤的访问,那么您将喜欢使用`StackWalker`API。该 API 提供对调用堆栈的快速优化访问,实现对单个帧的延迟访问。 [第 11 章](11.html)*新工具和工具增强*,涵盖了十几种与现代 Java 平台相关的工具和工具增强。这些特色的变化将涵盖广泛的工具和 api 的更新,这些工具和 api 旨在简化 Java 开发,增强创建优化 Java 应用程序的能力。 [第 12 章](12.html)*并发增强*介绍了 Java 平台的并发增强。我们主要关注的是对反应式编程的支持,这是一种由`Flow`类 API 提供的并发增强。反应式编程最初是在 Java9 中发布的,它仍然是 Java10 和 Java11 的一个重要特性。 [第 13 章](13.html)*安全增强*介绍了最近对 JDK 进行的几个涉及安全性的更改,这些更改的大小并没有反映出它们的重要性。现代 Java 平台的安全性增强为开发人员提供了编写和维护比以前更安全的应用程序的能力。 [第 14 章](14.html)*命令行标志*,探讨了现代 Java 平台的一些变化,这些变化的共同主题是命令行标志。这些包括以下概念:统一 JVM 日志、编译器控制、诊断命令、堆分析代理、删除 JHAT、命令行标志参数验证、针对旧平台版本的编译,以及实验性的基于 Java 的 JIT 编译器。 [第 15 章](15.html)*Java 平台的附加增强*,重点介绍 Java 平台提供的附加实用程序的最佳实践。具体来说,本章介绍对 UTF-8、Unicode 支持、Linux/AArch64 端口、多分辨率图像和公共区域设置数据存储库的支持。 [第 16 章](16.html)*未来方向*概述了 Java 平台在 java11 之外的未来发展。我们看一下 Java19.3 和 19.9 的计划内容,以及将来可能会看到哪些进一步的变化。我们首先简要介绍一下**JDK 增强程序**(**JEP**)。 [第 17 章](17.html)*对 Java 平台的贡献*,讨论了 Java 社区和开发人员对 Java 平台的贡献方式。具体来说,本章涵盖了以下与 Java 社区相关的主题,如 Java 社区、参与 Java 用户组、Java 社区过程、**Oracle 技术网络**(**OTN**)以及撰写技术文章 # 充分利用这本书 我们鼓励您下载 Java11JDK,以便遵循本书中提供的示例。 # 下载示例代码文件 您可以从您的帐户[下载本书的示例代码文件 www.packt.com](http://www.packt.com)。如果您在其他地方购买了本书,您可以访问[www.packt.com/support](http://www.packt.com/support)并注册,将文件直接通过电子邮件发送给您。 您可以通过以下步骤下载代码文件: 1. 在[登录或注册 www.packt.com](http://www.packt.com)。 2. 选择“支持”选项卡。 3. 点击代码下载和勘误表。 4. 在搜索框中输入图书名称,然后按照屏幕上的说明进行操作。 下载文件后,请确保使用最新版本的解压缩或解压缩文件夹: * 用于 Windows 的 WinRAR/7-Zip * Mac 的 Zipeg/iZip/UnRarX * 用于 Linux 的 7-Zip/PeaZip 这本书的代码包也托管在 GitHub 上的[https://github.com/PacktPublishing/Mastering-Java-11-Second-Edition](https://github.com/PacktPublishing/Mastering-Java-11-Second-Edition)。如果代码有更新,它将在现有 GitHub 存储库中更新。 我们的丰富书籍和视频目录中还有其他代码包,可在**[上找到 https://github.com/PacktPublishing/](https://github.com/PacktPublishing/)**。看看他们! # 下载彩色图像 我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:[https://www.packtpub.com/sites/default/files/downloads/9781789137613\u ColorImages.pdf](https://www.packtpub.com/sites/default/files/downloads/9781789137613_ColorImages.pdf)。 # 使用的约定 这本书中使用了许多文本约定。 `CodeInText`:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。下面是一个示例:“将下载的`WebStorm-10*.dmg`磁盘映像文件作为系统中的另一个磁盘装入。” 代码块设置如下: ```java try ( Scanner xmlScanner = new Scanner(new File(xmlFile)); { while (xmlScanner.hasNext()) { // read the xml document and perform needed operations ``` 当我们希望提请您注意代码块的特定部分时,相关行或项以粗体显示: ```java public default void fastWalk() { Scanner scanner = new Scanner(System.in); System.out.println("Enter desired pacing: "); ``` 任何命令行输入或输出的编写方式如下: ```java $ java --version ``` **粗体**:表示一个新术语、一个重要单词或屏幕上显示的单词。例如,菜单或对话框中的单词会像这样出现在文本中。下面是一个示例:“从管理面板中选择系统信息。” 警告或重要提示如下所示。 提示和窍门是这样出现的。 # 保持联系 我们欢迎读者的反馈。 **总体反馈**:如果您对本书的任何方面有任何疑问,请在留言主题中注明书名,并发送电子邮件至`customercare@packtpub.com`。 **勘误表**:虽然我们已经尽一切努力确保内容的准确性,但还是会出现错误。如果您在本书中发现错误,请向我们报告,我们将不胜感激。请访问[www.packt.com/submit-errata](http://www.packt.com/submit-errata),选择您的书籍,点击勘误表提交表单链接,输入详细信息。 **盗版**:如果您在互联网上遇到任何形式的非法复制我们的作品,请您提供我们的位置地址或网站名称,我们将不胜感激。请通过`copyright@packt.com`与我们联系,并提供该材料的链接。 **如果你有兴趣成为一名作家**:如果有一个你有专长的话题,你有兴趣写一本书或为一本书做贡献,请访问[作者.packtpub.com](http://authors.packtpub.com/)。 # 评论 请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?潜在的读者可以看到并使用你的无偏见的意见作出购买决定,我们在 Packt 可以理解你对我们产品的看法,我们的作者可以看到你对他们的书的反馈。谢谢您! 有关 Packt 的更多信息,请访问[packt.com 网站](http://www.packt.com/)。