JDK9新特性与使用指南
立即解锁
发布时间: 2025-08-18 02:22:40 阅读量: 2 订阅数: 8 

# JDK 9 新特性与使用指南
## 1. JDK 9 简介
JDK 9 是 Java 开发工具包的第九个主要版本,计划于 2017 年 7 月下旬发布。它带来了许多令人兴奋的新特性,以下是一些重要特性的介绍:
- **模块系统(Jigsaw 项目)**:JDK 设计者花了十多年时间尝试将模块系统引入 Java 平台。该系统的主要目标是让 Java 开发者能以模块这种软件组件来开发应用。模块可以导出其 API 供外部使用,同时封装内部实现。模块还能声明对其他模块的依赖,并在启动时验证这些依赖,避免因缺失类型而导致的运行时问题。JDK 本身也被拆分为一组相互交互的模块,提供了可扩展的运行时环境。如果应用只使用 JDK 的一部分,还能创建包含所需 JDK 模块和应用模块的运行时镜像。不过,模块系统面临的主要难题是向后兼容性以及迁移和适配路径,经过多次基于社区反馈的重新设计和改进,最终得以发布。
- **JShell**:这是 Java 的 REPL(Read - Eval - Print Loop)工具,既是命令行工具也是 API。它允许开发者执行代码片段并立即获得反馈,而在 JShell 出现之前,开发者需要编写完整程序、编译并运行才能得到反馈。JShell 对初学者很重要,能帮助他们在不了解模块和包等程序结构细节的情况下快速学习 Java 语言。
- **其他特性**:还包括 Reactive Streams API、集合工厂方法、HTTP/2 客户端 API、Stack - Walking API、平台日志 API 和统一的 JVM 日志等。
## 2. 阅读指南
相关内容共包含 20 个章节,各章节的阅读建议如下:
|章节|内容|阅读建议|
| ---- | ---- | ---- |
|第 2 - 10 章|模块系统|建议按顺序阅读。虽然不了解模块系统也可能将现有应用迁移到 JDK 9,但要充分利用 JDK 9 的优势,就必须学习并使用模块系统来开发新应用和迁移旧应用。|
|第 11 章|Java Shell|可在不阅读前 10 章的情况下阅读,但按顺序阅读能获得更全面的理解。|
|第 12 - 20 章|独立主题|可按任意顺序阅读。最后一章涵盖了一些较小的主题。|
下面对各章节的主要内容做简要介绍:
- **第 2 章:模块系统**:回顾 Java 9 之前的情况,介绍新的模块系统,包括模块的定义、依赖关系、模块图、聚合模块等概念,还会涉及模块的声明、命名、访问控制、依赖声明、服务配置等内容。
- **第 3 章:创建第一个模块**:通过命令行和 NetBeans IDE 两种方式,逐步展示如何声明模块、编写代码、编译模块和运行模块中的类。
- **第 4 章:模块依赖**:深入探讨模块依赖的声明,解决可能出现的问题,如空包错误、模块未找到错误等。还会介绍隐式可读性、限定导出、可选依赖、反射访问模块等内容,以及不同类型的模块和迁移到 JDK 9 的路径。
- **第 5 章:实现服务**:介绍如何利用模块系统的简单指令在 JDK 9 中实现服务,同时解释 JDK 9 之前服务的实现方式。
- **第 6 章:打包模块**:解释可以用来打包模块的不同格式,如 JAR 和 JMOD 格式,并说明何时选择哪种格式。在 JDK 8 及以前,只能使用 JAR 文件打包 Java 应用。
- **第 7 章:创建自定义运行时镜像**:讲解如何使用 jlink 工具创建内部格式为 JIMAGE 的自定义运行时镜像。
- **第 8 章:JDK 9 中的重大变更**:解释迁移到 JDK 9 时可能会导致现有应用出现问题的变更,并提供修复建议和替代方案。
- **第 9 章:打破模块封装**:说明如何打破模块系统的封装特性。JDK 9 提供了一些非标准的命令行选项,可用于访问原本封装不可访问的模块代码,这在迁移使用过 JDK 内部 API 或第三方库的遗留应用时可能会用到。
- **第 10 章:模块 API**:介绍如何通过 Module API 以编程方式访问模块系统,使用模块声明和命令行选项能完成的操作,使用 Module API 也能实现。
- **第 11 章:Java Shell**:详细介绍 JShell 工具和 JShell API,包括启动和退出 JShell 工具、代码片段和命令的使用、表达式求值、变量声明、方法声明等内容,还会涉及 JShell 的配置和使用 JShell API 执行代码片段。
- **第 12 章:进程 API 更新**:介绍 JDK 9 中进程 API 的新增内容,但不涵盖自 JDK 1.0 以来的整个进程 API。
下面是一个简单的 mermaid 流程图,展示了模块系统相关章节的关系:
```mermaid
graph LR
A[第 2 章:模块系统] --> B[第 3 章:创建第一个模块]
B --> C[第 4 章:模块依赖]
C --> D[第 5 章:实现服务]
D --> E[第 6 章:打包模块]
E --> F[第 7 章:创建自定义运行时镜像]
F --> G[第 8 章:JDK 9 中的重大变更]
G --> H[第 9 章:打破模块封装]
H --> I[第 10 章:模块 API]
```
通过以上介绍,开发者可以对 JDK 9 的新特性和各章节内容有一个初步的了解,为进一步学习和使用 JDK 9 打下基础。
## 3. 系统要求与环境搭建
### 3.1 系统要求
使用相关示例代码需要满足一定的系统要求,不过文档中未详细提及具体的系统要求信息,建议参考官方文档以确保系统环境能够支持 JDK 9 的运行。
### 3.2 安装 NetBeans IDE
安装 NetBeans IDE 可以按照以下步骤进行:
1. 访问 NetBeans 官方网站,下载适合自己操作系统的安装包。
2. 运行安装包,按照安装向导的提示进行操作。在安装过程中,可能需要选择安装路径、组件等信息,根据自己的需求进行选择。
3. 完成安装后,启动 NetBeans IDE,进行必要的配置,如设置 JDK 路径等。
### 3.3 下载源代码
可以通过访问指定的网址 http://www.apress.com/us/book/9781484225912 来获取相关示例的源代码。下载完成后,将源代码解压到合适的目录,以便后续使用。
## 4. 部分特性详细介绍
### 4.1 模块系统详细内容
#### 4.1.1 模块的基本概念
- **模块定义**:模块是一种软件组件,它可以导出其 API 供其他模块使用,同时封装内部实现。例如,一个模块可以包含一组相关的类和接口,它可以选择将其中一部分类和接口导出,而将其他部分隐藏起来。
- **模块依赖**:模块可以声明对其他模块的依赖,在启动时会验证这些依赖关系。例如,模块 A 依赖于模块 B,那么在运行模块 A 时,系统会确保模块 B 已经正确加载。
- **模块图**:模块之间的依赖关系可以用模块图来表示,它展示了模块之间的相互关系。
#### 4.1.2 模块声明与配置
- **模块声明**:需要在模块描述文件(module-info.java)中声明模块的名称、导出的包、依赖的模块等信息。例如:
```java
module myModule {
exports com.example.myPackage;
requires otherModule;
}
```
- **模块访问控制**:可以通过 `exports` 关键字控制哪些包可以被其他模块访问,通过 `requires` 关键字声明对其他模块的依赖。
- **模块版本**:可以为模块指定版本号,方便管理和维护。
#### 4.1.3 模块类型
- **正常模块**:具有明确的模块声明和依赖关系的模块。
- **开放模块**:允许反射访问其所有包的模块。
- **自动模块**:由传统的 JAR 文件转换而来的模块,其模块名和依赖关系根据 JAR 文件的名称和内容自动推断。
- **未命名模块**:没有显式模块声明的代码所在的模块。
### 4.2 Java Shell 详细内容
#### 4.2.1 JShell 基本操作
- **启动和退出**:可以通过命令行启动 JShell 工具,输入 `jshell` 命令即可。退出 JShell 可以使用 `/exit` 命令。
- **代码片段和命令**:在 JShell 中可以输入代码片段,如表达式、变量声明、方法声明等,也可以使用一些命令,如 `/list` 列出所有代码片段,`/edit` 编辑代码片段等。
- **表达式求值**:输入表达式后,JShell 会立即计算并输出结果。例如,输入 `2 + 3`,JShell 会输出 `$1 ==> 5`。
#### 4.2.2 JShell 配置
- **设置反馈模式**:可以通过 `/set feedback` 命令设置不同的反馈模式,如 `verbose` 模式会输出更详细的信息。
- **设置启动代码片段**:可以在配置文件中设置启动时自动执行的代码片段。
下面是一个简单的 mermaid 流程图,展示了 Java Shell 的基本使用流程:
```mermaid
graph LR
A[启动 JShell] --> B[输入代码片段]
B --> C{是否有效}
C -- 是 --> D[输出结果]
C -- 否 --> E[提示错误]
D --> F{是否继续输入}
F -- 是 --> B
F -- 否 --> G[退出 JShell]
```
## 5. 总结
JDK 9 带来了众多重要的新特性,其中模块系统和 Java Shell 是两个非常突出的特性。模块系统解决了 Java 开发中长期存在的一些问题,如 API 封装、配置和可扩展性等问题,为 Java 应用的开发和维护提供了更好的支持。Java Shell 则大大提高了开发效率,让开发者能够更快速地验证代码。此外,JDK 9 还包含了其他许多有用的特性,如 Reactive Streams API、HTTP/2 客户端 API 等。开发者可以根据自己的需求,深入学习和使用这些特性,提升自己的开发能力和应用的质量。
0
0
复制全文
相关推荐









