查看class文件的jdk编译器版本

         老的项目进行维护时,都是在原有的jar包的基础上添加class或者修改class,而不是 重新编译jar包,这就要求所使用的jdk版本必须一致,否则运行时可能会遇到版本不一致的问题。查看一个class所使用的jdk版本,有两种方式。
第一种就是运用jdk自带的反编译命令:
javap -verbose classname
示例如下:
D:\WorkSpace\ThinkingInJava4\bin\thinkInJava\observerMod>javap -verbose Client
会输出一些信息(一部分类中的内容无用就不粘贴了,直接看文件头信息),大致如下:
Compiled from “Client.java”
public class thinkInJava.observerMod.Client extends java.lang.Object
  SourceFile: “Client.java”
  minor version: 0
  major version: 49
  Constant pool:
const #1 = class        #2;     //  thinkInJava/observerMod/Client
后面省略了,可以看到前面有两行:
minor version:0
major version: 49
第二种方式:

用UE打开class文件,查看第一行信息:

CA FE BA BE 00 00 00 31…..

ue打开class文件第一行内容
ue打开class文件第一行内容
对应下表,可以找到对应的jdk编译版本
JDK 编译器版本 target 参数 (十六进制 )minor.major (十进制) major.minor
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
张贴在未分类

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注