# java17-new-features **Repository Path**: fix-bugs/java17-new-features ## Basic Information - **Project Name**: java17-new-features - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-06 - **Last Updated**: 2026-02-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java 17 新特性示例项目 本项目展示了 Java 17 中引入的一些重要新特性和语法改进,包括密封类(Sealed Classes)、记录类(Records)、模式匹配(Pattern Matching)、文本块(Text Blocks)、局部变量类型推断(var)以及集合和流的新功能。 --- ## 目录结构 ``` src/main/java/org/example/ ├── sealedexample/ # 密封类示例 │ ├── Level_0.java # 密封父类 │ ├── Level0_0.java # 非密封子类 │ ├── Level0_0_0.java # 普通子类 │ ├── Level0_1.java # 密封子类 │ ├── Level0_1_0.java # 非密封子类 │ └── Level0_2.java # 最终子类(不可继承) ├── CollectionExample.java # 集合与流的新功能示例 ├── InstanceofExample.java # instanceof 模式匹配示例 ├── RecordExample.java # 记录类示例 ├── SwitchExample.java # switch 表达式增强示例 ├── TextExample.java # 文本块示例 └── VarExample.java # 局部变量类型推断示例 ``` --- ## 功能说明 ### 1. 密封类(Sealed Classes) **文件路径**: `sealedexample/` Java 17 引入了密封类的概念,用于严格控制类的继承关系。通过 `sealed`、`non-sealed` 和 `final` 关键字实现更灵活的继承控制。 #### 示例说明: - **[Level_0.java](file://E:\projs\example\java17-new-features\src\main\java\org\example\sealedexample\Level_0.java)**: 定义了一个密封父类,使用 `permits` 明确指定允许继承的子类。 - **[Level0_0.java](file://E:\projs\example\java17-new-features\src\main\java\org\example\sealedexample\Level0_0.java)**: 使用 `non-sealed` 声明为非密封类,可以被任意继承。 - **[Level0_1.java](file://E:\projs\example\java17-new-features\src\main\java\org\example\sealedexample\Level0_1.java)**: 使用 `sealed` 延续密封特性,并通过 `permits` 指定其子类。 - **[Level0_2.java](file://E:\projs\example\java17-new-features\src\main\java\org\example\sealedexample\Level0_2.java)**: 使用 `final` 声明为最终类,禁止进一步继承。 --- ### 2. 记录类(Records) **文件路径**: [RecordExample.java](file://E:\projs\example\java17-new-features\src\main\java\org\example\RecordExample.java) 记录类是一种特殊的类,旨在简化数据载体的定义。它自动生成构造函数、`equals()`、`hashCode()` 和 `toString()` 方法。 #### 示例说明: - **传统类 [Demo](file://E:\projs\example\java17-new-features\src\main\java\org\example\RecordExample.java#L5-L21)**: 手动定义字段、构造函数及 getter 方法。 - **记录类 `RecordDemo`**: 自动提供字段访问器和标准方法,减少样板代码。 --- ### 3. instanceof 模式匹配 **文件路径**: [InstanceofExample.java](file://E:\projs\example\java17-new-features\src\main\java\org\example\InstanceofExample.java) Java 17 改进了 `instanceof` 的用法,支持在检查类型的同时直接声明变量。 #### 示例说明: ```java if (obj instanceof String str) { // 直接使用 str 变量 } ``` --- ### 4. switch 表达式增强 **文件路径**: [SwitchExample.java](file://E:\projs\example\java17-new-features\src\main\java\org\example\SwitchExample.java) Java 17 对 `switch` 进行了大幅增强,支持箭头语法(`->`)和 `yield` 返回值。 #### 示例说明: - **传统 switch**: 使用 `break` 控制流程。 - **新式 switch**: - 箭头语法简化分支逻辑。 - `yield` 用于从块中返回值。 - 支持对 `Object` 类型的模式匹配(需 JDK 21+)。 --- ### 5. 文本块(Text Blocks) **文件路径**: [TextExample.java](file://E:\projs\example\java17-new-features\src\main\java\org\example\TextExample.java) 文本块使用三重引号(`"""`)定义多行字符串,避免转义字符并提高可读性。 #### 示例说明: ```java String strNew = """ A B C 'D' `E` """; ``` --- ### 6. 局部变量类型推断(var) **文件路径**: [VarExample.java](file://E:\projs\example\java17-new-features\src\main\java\org\example\VarExample.java) Java 10 引入的 `var` 关键字在 Java 17 中继续支持,用于局部变量的类型推断。 #### 示例说明: ```java var strB = "i am var string"; // 编译器自动推断类型为 String ``` --- ### 7. 集合与流的新功能 **文件路径**: [CollectionExample.java](file://E:\projs\example\java17-new-features\src\main\java\org\example\CollectionExample.java) Java 17 提供了一些新的集合和流操作 API,例如 `ofNullable`、`takeWhile` 和 `dropWhile`。 #### 示例说明: - **`List.of` / `Set.of` / `Map.of`**: 创建不可变集合。 - **`Stream.takeWhile`**: 获取满足条件的前缀元素。 - **`Stream.dropWhile`**: 跳过满足条件的前缀元素。 - **`Stream.ofNullable`**: 处理可能为 `null` 的对象,避免空指针异常。 --- ## 运行环境要求 - **JDK 版本**: Java 17 或更高版本 - **构建工具**: Maven 或 Gradle(可选) --- ## 如何运行 1. 克隆项目到本地: ```bash git clone ``` 2. 进入项目目录: ```bash cd java17-new-features ``` 3. 编译并运行某个示例类: ```bash javac src/main/java/org/example/*.java java org.example.RecordExample ``` --- ## 总结 该项目涵盖了 Java 17 的主要新特性,适合学习和实践现代 Java 开发技巧。每个示例都配有详细注释,帮助理解其用途和优势。 --- 如需进一步了解某项特性的细节,请查看对应源码中的注释部分。