流年似水博客开通了,本站主要是写关于Web和大数据方面内容,正在更新中,欢迎大家光临!
  1. 文章:97 篇
  2. 总浏览:54,278 次
  3. 评论:22条
  4. 最后更新:2020-06-08
  5. 分类目录:39 个

Java之Exception in thread “main” java.lang.UnsupportedClassVersionError解决办法

Java l, xy 776℃ 0评论

Exception in thread “main” java.lang.UnsupportedClassVersionError解决办法

前言

学习java也有几年了,以前也遇到过这样的问题。就是换了高版本的JDK就能解决。一直不知道什么原因。最近看了周志明的《02_深入理解Java虚拟机 JVM高级特性与最佳实践》这本书才明白为什么。

错误再现:

一、测试代码:

  1. class Test
  2. {
  3. public static void main(String[] args)
  4. {
  5. System.out.println("Hello World!");
  6. }
  7. }

二、使用JDK8编译以后的class文件,使用winhex打开(十六进制表示)

这里写图片描述

  1. 解释:
  2. class文件魔法值: 0xCAFEBABE 十六进制表示,相当于class文件类型的标志。很多
  3. 文件都有这种魔法值,例如图片gif或者jpeg都有base64的表示
  4. data:image/gif;base64, data:image/jpeg;base64,
  5. 示图片的base64表示类型
  6. 这里可以看出class文件的魔法值使用4个字节表示(一个十六进制占用4bit,共8个十六进制)
  7. 次版本: 0x00 换成十进制也是 0
  8. 主版本: 0x34 换成十进制及时 52
  9. 所以可以看出class文件是使用52.0版本的JDK编译的,而java中初始版本为45,以后没一个大的版本都加1。所以可以推断该class文件是使用JDK8编译的。

三、使用JDK7运行

1#.将Test.class文件拷贝到我JDK7的bin目录下(D:\java\jdk1.7.0_51\bin)

这里写图片描述

2.在JDK7的bin目录下打开cmd命令窗口,运行Test.class文件

这里写图片描述

3.报错:

这里写图片描述

错误分析:

  1. JVM中可以运行当前JDK版本或者比当前版本低的编译器编译的class文件,如果使用高版本的编译
  2. 器编译的class文件在低版本的JVM上运行将会报以上错误。
  3. 以下是周志明的《02_深入理解Java虚拟机 JVM高级特性与最佳实践》这本书给出的解释:

这里写图片描述

转载请注明:流年似水 » Java之Exception in thread “main” java.lang.UnsupportedClassVersionError解决办法

喜欢 (0)or分享 (0)

Warning: copy(https://cn.gravatar.com/avatar/?s=54&d=%2Fwp-content%2Fthemes%2Fyusi1.0%2Fimg%2Fdefault.png&r=g): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 239

Warning: copy(/wp-content/themes/yusi1.0/img/default.png): failed to open stream: No such file or directory in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 243
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址