Java中的UnsupportedClassVersionError和解决方法
在本文中,我们将讨论java.lang.UnsupportedClassVersionError及其修复方法。
Java中何时抛出UnsupportedClassVersionError
当Java虚拟机试图读取当前JVM版本不支持主要和次要版本号的类文件时,抛出UnsupportedClassVersionError。为了更好地理解它,我们需要一些有关类文件格式的背景以及主要和次要版本的知识。
Java虚拟机类文件格式包含许多部分,对于UnsupportedClassVersionError,感兴趣的部分是第二部分,用于说明类文件格式的版本。此部分为4个字节,其中2个字节分配给minor_version,2个字节分配给major_version。主版本号和次版本号共同决定了类文件格式的版本。
如果类文件版本大于JVM支持的版本,则抛出java.lang.UnsupportedClassVersionError。 Java虚拟机实现所遵循的Java SE平台的发行级别负责确定JVM支持的主要版本和次要版本的范围。
类文件的主版本号是从所使用的Java版本派生的。
Java版本 | 支持的类版本 |
---|---|
Java SE 14 | 58(十六进制0x3A) |
Java SE 13 | 57(十六进制0x39) |
Java SE 12 | 56(十六进制0x38) |
Java SE 11 | 55(十六进制0x37) |
Java SE 10 | 54(16x 0x36) |
Java SE 9 | 53(十六进制0x35) |
Java SE 8 | 52(十六进制0x34) |
Java SE 7 | 51(十六进制0x33) |
Java SE 6 | 50(十六进制0x32) |
Java SE 5 | 49(十六进制0x31) |
JDK 1.4 | 48(十六进制0x30) |
JDK 1.3 | 47(十六进制0x2F) |
JDK 1.2 | 46(十六进制0x2E) |
JDK 1.1 | 45(十六进制0x2D) |
Java示例中的UnsupportedClassVersionError
这是抛出UnsupportedClassVersionError的示例。使用Java 12编译器编译Java文件,然后使用Java 10执行该类。
C:\Program Files\Java\jdk-10.0.1\bin>java -classpath F:\theitroadws\src\ com.theitroad.programs.Test Error: LinkageError occurred while loading main class com.theitroad.programs.Test java.lang.UnsupportedClassVersionError: com/theitroad/programs/Test has been compiled by a more recent version of the Java Runtime (class file version 56.0), this version of the Java Runtime only recognizes class file versions up to 54.0
Java UnsupportedClassVersionError层次结构
UnsupportedClassVersionError是java.lang.Error的后代。由于它属于错误类型,因此我们无法执行任何异常处理来从中恢复。
如何修复UnsupportedClassVersionError
当用于编译Java文件的JVM和用于执行Java类的JVM不兼容时,抛出UnsupportedClassVersionError,因此有两个选项
1.使用更高版本的Java执行Java类。
2.如果无法使用更高版本的Java,请尝试使用用于运行应用程序的Java版本来编译Java代码文件。
如果使用的是Eclipse IDE,则可以通过转到窗口–首选项– Java –已安装的JRE来选择所需的JRE版本。单击添加,然后从安装的文件夹中选择JDK。
我们还可以根据需要提高或者降低编译器的遵从级别。转到项目(从菜单或者右键单击当前项目)–属性– Java编译器,然后启用特定于项目的设置以设置项目的编译器符合级别。