JDK 17安装后需确保编译运行环境均指向该版本,才能使用密封类、Records等原生特性;预览特性需显式添加--enable-preview参数;IDE和构建工具须同步配置JDK 17及对应语言级别。

JDK 17 安装配置本身不“开启”新特性,而是为使用现代 Java 特性提供基础运行与编译环境。只要正确安装并验证通过,所有 JDK 17 原生支持的语言特性和 JVM 功能(如密封类、模式匹配、Records、ZGC 等)就可直接使用——无需额外开关或插件。
确保 JDK 17 是项目实际使用的版本
很多开发者装了 JDK 17,但 IDE 或构建工具仍用旧版 JDK 编译,导致新语法报错。关键不是“装没装”,而是“用没用”:
- 在命令行执行 javac -version 和 java -version,输出必须是 17.x.x(如 17.0.8),且两者版本一致
- IntelliJ IDEA 中:File → Project Structure → Project → Project SDK → 选中你安装的 JDK 17 目录;同时确认 Project language level 也设为 “17”
- Maven 项目需在 pom.xml 中显式声明编译级别:
<properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties>
- Gradle 项目需在 build.gradle 中配置:
java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 }
启用预览特性(如需要)
部分特性(如早期的模式匹配 for instanceof)在 JDK 17 中仍是预览状态(虽已稳定,但默认禁用)。若要使用,编译和运行时需加参数:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 编译:javac --enable-preview --source 17 YourClass.java
- 运行:java --enable-preview YourClass
- IDEA 中可在 Settings → Build → Compiler → Java Compiler → Additional command line parameters 填入 --enable-preview
- Maven 可通过
maven-compiler-plugin配置<compilerArgs>启用
验证现代特性能否真正运行
光看版本号不够,写段典型代码快速实测最可靠:
立即学习“Java免费学习笔记(深入)”;
- 密封类示例(JDK 17 正式特性):
public sealed interface Shape permits Circle, Rectangle {} final class Circle implements Shape {} final class Rectangle implements Shape {} - Records 示例(无需 getter/setter):
record Person(String name, int age) {} var p = new Person("Alice", 30); System.out.println(p.name()); // 直接调用自动生成的 accessor - Switch 表达式(简洁返回值写法):
String day = switch (dayNum) { case 1 -> "Monday"; case 2 -> "Tuesday"; default -> "Unknown"; };
避免常见干扰项
有些问题看似是“特性不支持”,实则是环境或配置干扰:
- 不要手动配置 CLASSPATH:现代构建工具(Maven/Gradle)和 IDE 自动管理类路径,错误的 CLASSPATH 反而会屏蔽模块路径(--module-path),导致模块化相关特性异常
-
JAVA_HOME 路径不能含空格或中文:Windows 下若装在
C:\Program Files\...,建议改用无空格路径(如D:\jdk-17)或使用短路径名,否则某些脚本可能解析失败 -
检查是否多个 JDK 共存冲突:PATH 中多个
bin目录可能导致java和javac版本不一致,用where java和where javac查看实际调用路径

















