小能豆

如何修复 java.lang.UnsupportedClassVersionError: Unsupported major.minor version 错误?

java

如何修复 java.lang.UnsupportedClassVersionError: Unsupported major.minor version 错误?


阅读 5

收藏
2024-12-21

共1个答案

小能豆

详解

java.lang.UnsupportedClassVersionError: Unsupported major.minor version 是一个运行时错误,通常在尝试运行编译后的 Java 类文件时出现。它表示你正在尝试在一个较低版本的 Java 运行时环境(JRE)中运行由较高版本的 Java 编译器生成的类文件。

错误原因

每个 Java 版本都有自己的 class 文件版本号,也称为 major/minor version。当你用较新的 Java 版本(例如 Java 17)编译代码,然后尝试在较旧的 Java 运行时(例如 Java 8)中运行该代码时,JVM(Java 虚拟机)无法识别该 class 文件的版本,进而抛出 UnsupportedClassVersionError 错误。

例如,以下情况会导致该错误:

  • 你用 Java 17 编译了代码,但尝试用 Java 8 运行它。
  • 用 Java 11 编译的代码在 Java 7 环境中运行。

Class 文件的版本号对应表

以下是常见 Java 版本与其 class 文件的版本号对应关系:

Java 版本 Major.Minor 版本号
Java 8 52.0
Java 9 53.0
Java 10 54.0
Java 11 55.0
Java 12 56.0
Java 13 57.0
Java 14 58.0
Java 15 59.0
Java 16 60.0
Java 17 61.0

例如,如果错误消息显示 Unsupported major.minor version 55.0,则意味着你尝试用 Java 8 或更低版本的运行时来运行 Java 11 编译的代码。


如何修复这个错误

要修复这个错误,主要有两种解决方案:

1. 升级 Java 运行时环境(JRE)

如果你编译代码时使用了较高版本的 Java(例如 Java 11 或 17),则需要确保你的运行环境使用相同或更高版本的 JRE。

  • 步骤:下载并安装正确版本的 Java JRE 或 JDK,确保它与你编译代码时的 Java 版本一致。

  • 检查当前 Java 版本:你可以通过命令行运行以下命令来查看当前安装的 Java 版本:

bash java -version

示例输出:

java version "11.0.2" 2019-01-15 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)

如果版本低于你编译代码所用的版本,则需要升级到正确的版本。

2. 在编译时指定兼容的目标版本

如果你希望编译后的代码能够在较旧版本的 Java 运行时上运行,则可以在编译时使用 javac-target-source 选项指定兼容的 Java 版本。

例如,如果你希望用 Java 11 编译代码,但目标运行时是 Java 8,你可以这样编译:

javac -source 1.8 -target 1.8 MyClass.java

这样会确保生成的 MyClass.class 文件可以在 Java 8 的环境下运行。

  • -source:指定源代码的语法版本。
  • -target:指定编译后 class 文件的版本。

另外,还需要确保你有相应的 JDK 版本可供编译,尤其是在使用 Java 9 或更高版本的模块系统时。

案例分析

假设你有以下 Java 类:

public class Example {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}
  1. 如果你用 Java 11 编译该类:

bash javac Example.java

然后尝试在 Java 8 的 JRE 环境中运行它:

bash java Example

你可能会遇到如下错误:

Exception in thread "main" java.lang.UnsupportedClassVersionError: Example has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

  1. 修复方法

  2. 方法 1:升级你的 Java 运行时环境到 Java 11 或更新版本。

  3. 方法 2:使用 javac-source-target 参数,重新编译代码,使它兼容 Java 8:

bash javac -source 1.8 -target 1.8 Example.java

这样,你编译的 Example.class 文件将能够在 Java 8 环境中正常运行。


总结

  • java.lang.UnsupportedClassVersionError: Unsupported major.minor version 错误通常由 Java 版本不兼容引起,即编译时使用的 Java 版本比运行时使用的版本更新。
  • 解决这个问题的方法包括:升级运行时的 Java 版本,或者在编译时指定目标版本,使生成的类文件与运行时兼容。
2024-12-21