java常见错误之unsupported major.minor version

          今天编译时遇到一个错误unsupported major.minor version50.0,看到这个错误的时候, 我首先想到了是java编译器版本的问题,因为我PC默认的JDK是1.7,但是在Eclipse里面默认的是1.6,当我调整了JDK的版本后,这个问题就解决了。

          回到问题的本身,major和minor是什么呢?Google一下可以得到很多信息,它实际上是软件的主次版本号,51是主版本号,0是次版本号。怎么能查看到它的版本号呢?java实际也提供了这个命令,javap.

         

javap -verboase xxx.class

 就可以得到这个class文件的一些相关信息,就可以清楚地看到major和minor的值。查看oracle的官网,有更多的javap命令的解释,http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javap.html

 

    在网上找到一个JDK的版本号的表

    

JDK 编译器版本 target 参数 十六进制 minor.major 十进制 minor.major
jdk1.1.8 不能带 target 参数 00 03 00 2D 45.3
jdk1.2.2 不带(默认为 -target 1.1) 00 03 00 2D 45.3
jdk1.2.2 -target 1.2 00 00   00 2E 46.0
jdk1.3.1_19 不带(默认为 -target 1.1) 00 03 00 2D 45.3
jdk1.3.1_19 -target 1.3 00 00   00 2F 47.0
j2sdk1.4.2_10 不带(默认为 -target 1.2) 00 00   00 2E 46.0
j2sdk1.4.2_10 -target 1.4 00 00   00 30 48.0
jdk1.5.0_11 不带(默认为 -target 1.5) 00 00   00 31 49.0
jdk1.5.0_11 -target 1.4 -source 1.4 00 00   00 30 48.0
jdk1.6.0_01 不带(默认为 -target 1.6) 00 00   00 32 50.0
jdk1.6.0_01 -target 1.5 00 00   00 31 49.0
jdk1.6.0_01 -target 1.4 -source 1.4 00 00   00 30 48.0
jdk1.7.0 不带(默认为 -target 1.6) 00 00   00 32 50.0
jdk1.7.0 -target 1.7 00 00   00 33 51.0
jdk1.7.0 -target 1.4 -source 1.4 00 00   00 30 48.0
Apache Harmony 5.0M3 不带(默认为 -target 1.2) 00 00   00 2E 46.0
Apache Harmony 5.0M3 -target 1.4 00 00   00 30 48.0

 

     可以看出,JDK1.7对应的版本号是50,JDK1.6对应的版本号是49. 低版本的JDK编译的class是可以在高版本的虚拟机上运行的,但是高版本的JDK编译的class是不能再低版本的虚拟机上运行的。

     

     如果我们碰到类似的问题,是否也需要下载一个低版本的JDK来重新编译一次呢?其实java早就帮我们考虑到了这一点,我们在编译的时候可以指明我们要使用哪个版本的JDK,如

     

javac -target 1.6  **.java

 

    但是有一点事需要注意的,如果你的java文件使用到的是1.7新增的一些feature,再指定到1.6编译,肯定是不行的。

   

你可能感兴趣的:(version)