1. 为什么要进行.class文件进行JDK版本的确定? 由于一个项目不只由一个人维护,可能会经过多个人的手里,对于项目比较老的,在项目交接的时候还没有项目文档(JDK编译运行的版本还不确定),所以这个时候就可以通过分析生产环境的JDK版本来确认本地开发环境;JDK的版本是向下兼容的,所有你在核对完.class的版本后就可以选择对应的JDK版本或高于当前JDK版本;还有就是由于多人的维护造成本地和生产环境还不一致,这个时候就只能进行.class文件的替换了,所以这就要求在本地开发完毕后生成和生产环境同.class的JDK版本,然后进行部分.class文件的替换。
2. 生产环境JDK版本确认,直接在Linux下执行该命令就能看对应.class 16进制文件内容。
hexdump MiscUtil.class | less
3. 开发环境生成的.class文件JDK版本确认,使用notepad++下载HexEditor.dll到notepad++\plugins目录下,使用HEX-Editor>View in HEX就能直接将.class以16进制方式打开。
4. 根据.class的16进制内容确认JDK版本 1)前面8个字节CA FE BA BE是固定的。 2)随后4个字节00 00是次版本号 3)再后面的4个字节00 32是JDK的版本号(JDK1.6)。
5. 详细的JDK版本对应关系: 34(对应十进制的50):JDK1.8 33(对应十进制的50):JDK1.7 32(对应十进制的50):JDK1.6 31(对应十进制的49):JDK1.5 30(对应十进制的48):JDK1.4 2F(对应十进制的47):JDK1.3 2E(对应十进制的46):JDK1.2