Java中的UnsupportedClassVersionError和解决方法

时间:2020-01-09 10:34:58  来源:igfitidea点击:

在本文中,我们将讨论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 1458(十六进制0x3A)
Java SE 1357(十六进制0x39)
Java SE 1256(十六进制0x38)
Java SE 1155(十六进制0x37)
Java SE 1054(16x 0x36)
Java SE 953(十六进制0x35)
Java SE 852(十六进制0x34)
Java SE 751(十六进制0x33)
Java SE 650(十六进制0x32)
Java SE 549(十六进制0x31)
JDK 1.448(十六进制0x30)
JDK 1.347(十六进制0x2F)
JDK 1.246(十六进制0x2E)
JDK 1.145(十六进制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编译器,然后启用特定于项目的设置以设置项目的编译器符合级别。