java打印版本兼容_打印class文件的Java编译器内部的版本号

当改变了jdk版本时,在编译java时,会遇到Unsupported major.minor version错误。

错误信息如下 :

Unsupported major.minor version 50.0

Unsupported major.minor version 49.0 (我在jdk1.4 和1.5切换时就遇到了这个错误)

Unsupported major.minor version 48.0

二、错误原因:

类似错误均属于Java版本问题,即JDK版本过低,只要选择相对应的JDK版本编译即可。

48,49,50是Java编译器内部的版本号:

Unsupported major.minor version 50.0 对应于 JDK1.6(JRE1.6)

Unsupported major.minor version 49.0 对应于 JDK1.5(JRE1.5)

Unsupported major.minor version 48.0 对应于 JDK1.4(JRE1.4)

importjava.io.DataInputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;public classClassVersionChecker {public static void main(String[] args) throwsIOException {

System.out.println(System.getProperty("java.version"));

String canonicalName= ClassVersionChecker.class.getCanonicalName();

String classPathSeparate= "/";

String extension= ".class";

String path= ClassVersionChecker.class.getResource(classPathSeparate + canonicalName.replace(".", classPathSeparate) +extension).getPath();

File file= newFile(path);

checkClassVersion(file);

}private static voidcheckClassVersion(File classFile)throwsIOException {

DataInputStream in= newDataInputStream

(newFileInputStream(classFile));int magic =in.readInt();if (magic != 0xcafebabe) {

System.out.println(classFile.getName()+ " is not a valid class!");

}int minor =in.readUnsignedShort();int major =in.readUnsignedShort();

System.out.println(classFile.getName()+ ": " + major + " . " +minor);

in.close();

}

}

JDK1.8:1.8.0_65

ClassVersionChecker.class: 52 . 0

JDK1.6:1.6.0_45

ClassVersionChecker.class: 50 . 0

如果可以拿到源代码,用当前环境JDK重新编译,再运行即可。(记得使用 -target -source 参数)

如果拿不到源代码,就要确认classes的编译器本版,然后用该版本运行。

下面是JDK 1.1 到 JDK 1.7 编译器编译出的 class 的默认 minor.major version

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值