我使用的是jdk21
时间: 2025-08-22 16:05:41 浏览: 1
### 问题分析
在使用 VSCode 和 JDK 21 编译 Java 文件时,出现 `java.lang.UnsupportedClassVersionError` 错误,提示内容为:
```
Preview features are not enabled
```
此错误表明程序使用了 Java 预览特性(Preview Features)进行编译,但运行时未启用预览特性支持,导致类文件版本不兼容。Java 从 14 版本开始引入预览特性机制,允许开发者使用实验性语言功能,但这些功能在默认情况下是禁用的[^1]。如果类文件中使用了这些功能,则在运行时必须启用预览功能支持,否则会抛出 `UnsupportedClassVersionError` 或 `VerifyError` 等错误。
### 解决方案
#### 1. 确认 Java 版本并启用预览特性
JDK 21 支持的类文件版本为 65,能够识别预览特性版本 65.65535。因此,只要在编译和运行时启用预览特性支持,即可解决此类问题。
使用以下命令编译和运行程序:
```bash
javac --enable-preview Helloworld.java
java --enable-preview Helloworld
```
上述命令中,`--enable-preview` 表示启用预览特性支持,确保 JVM 能够识别类文件中的预览语言功能。
#### 2. 在 VSCode 中配置 Java 编译器选项
VSCode 默认使用 `javac` 编译 Java 文件,但不会自动启用预览特性。可以通过修改 `.vscode/tasks.json` 文件,添加编译参数:
```json
{
"tasks": [
{
"label": "Run Java",
"type": "shell",
"command": "javac",
"args": ["--enable-preview", "Helloworld.java", "&&", "java", "--enable-preview", "Helloworld"]
}
]
}
```
此配置确保在编译和运行时都启用预览特性支持。
#### 3. 使用 Maven 或 Gradle 启用预览特性(如适用)
如果项目使用 Maven 或 Gradle 构建工具,需要在构建配置中启用预览特性。
**Maven 配置示例:**
```xml
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.release>21</maven.compiler.release>
<maven.compiler.compilerArgs>--enable-preview</maven.compiler.compilerArgs>
</properties>
```
**Gradle 配置示例:**
```groovy
tasks.withType(JavaCompile) {
options.compilerArgs += '--enable-preview'
}
```
#### 4. 避免使用预览特性(如非必要)
如果项目不需要使用预览特性,应避免使用这些功能,以确保代码在不同 Java 版本之间兼容。可以将代码中的 `record`、`switch expressions` 等预览特性替换为传统类和语句结构。
---
### 示例代码
假设 `Helloworld.java` 使用了 Java 21 的预览特性 `record`,其内容如下:
```java
public class Helloworld {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
System.out.println(person.name());
}
record Person(String name, int age) {}
}
```
编译并运行该程序的正确方式如下:
```bash
javac --enable-preview Helloworld.java
java --enable-preview Helloworld
```
---
### 总结
`UnsupportedClassVersionError` 通常表示类文件版本与当前 JVM 不兼容,特别是在使用预览特性时更为常见。解决方法包括启用预览功能支持、调整 VSCode 编译器配置、使用 Maven 或 Gradle 构建工具启用预览特性,以及避免使用预览特性。通过上述步骤,可以有效解决 `UnsupportedClassVersionError` 和类版本不匹配问题。
---
阅读全文
相关推荐




















