迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

修复 Java 错误 java.lang.UnsupportedClassVersionError

作者:迹忆客 最近更新:2023/07/11 浏览次数:

本篇文章介绍了 Java 中的 Exception in thread main java.lang.UnsupportedClassVersionError 错误。


java.lang.UnsupportedClassVersionError的原因

UnsupportedClassVersionError 是 ClassFormatError 异常的子类,当 JVM 尝试读取类并发现类文件格式错误或文件无法解释为类时,会抛出该异常。 以下是 UnsupportedClassVersionError 异常的层次结构:

Java.Lang.Object
    Java.Lang.Throwable
        Java.Lang.Error
            Java.Lang.LinkageError
                Java.Lang.ClassFormatError
                    Java.Lang.UnsupportedClassVersionError

UnsupportedClassVersionError 异常专门用于检测以前由较低版本的 Java 运行而现在由较新版本运行的类文件。

例如,假设一个 Java 文件由 JDK 12 运行,现在由较新的 JRE 8 运行。在这种情况下,它将抛出 UnsupportedClassVersionError 异常,或者如果我们使用 Java 版本 1.8 编译该类并使用 Java 1.7 编译它,它将抛出 UnsupportedClassVersionError 异常。 抛出同样的错误。

让我们尝试一个由较新版本的 Java 编译然后由旧版本运行的类中的示例。 参见示例:

public class Unsupported_Class_Version_Error{
    public static void main(String args[]) {
        System.out.println("Hello this is Delftstack.com");
    }
}

上面的代码将抛出 UnsupportedClassVersionError ,如下所示:

Exception in thread "main" java.lang.UnsupportedClassVersionError: Unsupported_Class_Version_Error : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

输出显示错误,因为代码是在 Java 1.8 上编译并在 Java 1.7 上执行的。 这就是为什么会抛出线程“main”java.lang.UnsupportedClassVersionError: Unsupported_Class_Version_Error : Unsupported Major.minor version 52.0 中的异常。


修复 java.lang.UnsupportedClassVersionError

出现这个错误有两个条件,所以解决办法就在于这两个条件:

  1. 使用最新的 JDK 和 JRE 运行代码。
  2. 使用旧版本的 JDK 编译代码以匹配运行时 JDK。
  3. 一种简单的解决方案是使用 Java 交叉编译。 如果生产环境的JDK低于构建环境,我们可以通过交叉编译生成较低版本的class文件。

以下命令将用于为上面的代码创建一个类文件:

javac -target 1.7 Unsupported_Class_Version_Error.java

如上所述,解决方案是在编译时和运行时使用相同版本构建应用程序,或者至少编译时版本低于运行时版本。

上面的错误显示了主要次要版本问题。 Major Minor版本是JRE的版本; 例如,对于 JRE 8,主要版本是 52.0。

我们必须确保在编译和执行Java Class文件时不会出现Major Minor版本问题。 与该类兼容的 JRE 版本列表是:

Java SE 17 = 61,
Java SE 16 = 60,
Java SE 15 = 59,
Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便