首页 > 其他 > 详细

UnSupportedClassVersionError

时间:2016-01-13 21:43:51      阅读:369      评论:0      收藏:0      [点我收藏+]

一、UnSupportedClassVersionError异常产生的根源

有时我们的代码在运行时,会抛出java.lang.UnSupportedClassVersionError异常。这个异常是java.lang.ClassFormatError(此类是java.lang.LinkageError)的子类。JVM在将一个class调入时候,在link阶段会检查class文件中的magic number,如果发现该magic number不在JVM所支持范围之内,就会扔出java.lang.UnSupportedClassVersionError异常。

当我们将java源代码文件编译成class文件的时候,class文件头部会有一个magic number,这个magic number即class文件的版本号码。通常的格式是:major_version.minor_version。这个号码暗示了class文件的格式。

通常来讲,使用高版本的jdk编译出来的class,运行在低版本的jdk环境上会出现此种错误。例如,使用JDK1.5编译出来的class运行在JDK 1.4上会报出这样的错误信息:

"java.lang.UnsupportedClassVersionError: Bad version number in .class file [at java.lang.ClassLoader.defineClass1(Native Method)]"

注意反之并不一定成立,即低版本JDK编译出来的class可以没有问题的运行在高版本的JDK上。

 

二、解决UnSupportedClassVersionError异常

1、到处问题的jar档,找到其源代码使用高版本的JDK重新编译;

2、升级JDK的版本试试看

 

三、编译Java代码

当我们使用javac编译源代码的时,有2个参数-source , -target。其中-source用来指定java语言的版本,-target用来指定class文件的版本。下面显示了各不同版本的JDK所支持的source版本和target版本。

JDK 默认的source source的范围 默认的target target的范围
1.0.x 1.0 -- 1.1 --
1.1.x 1.1 -- 1.1 --
1.2.x 1.2 -- 1.1 1.1 -- 1.2
1.3.x 1.2/1.3 -- 1.1 1.1 -- 1.3
1.4.x 1.2/1.3 1.2 -- 1.4 1.2 1.1 -- 1.4
5 1.5 1.2 -- 1.5 1.5 1.1 -- 1.5
6 1.6 1.2 -- 1.6 1.6 1.1 -- 1.6
7 1.7 1.2 -- 1.7 1.7 1.1 -- 1.7

  target和class版本的映射表

target

class version

(major.minor)

1.1 45.3
1.2 46.0
1.3 47.0
1.4 48.0
1.5 49.0
1.6 50.0
1.7 51.0
1.8 52.0

 

参考资料

https://en.wikipedia.org/wiki/Java_class_file

https://blogs.oracle.com/darcy/entry/source_target_class_file_version

http://stackoverflow.com/questions/27065/tool-to-read-and-display-java-class-versions

UnSupportedClassVersionError

原文:http://www.cnblogs.com/inno/p/5128409.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!