Java class文件查看对应的JDK版本
问题:
在Java应用项目中,有时会发现编译好的类或包拿到项目现场环境部署时会报错,大概意思就是用高版本JDK编译出来的包,在低版本的JDK中不能运行。于是只好重新编译为兼容低版本JDK的class,但怎样确认编译出的class(比如JDK1.8编译)是不是指定的版本(运行环境JDK1.7)呢?
解决:
通常有2个办法,一是使用ultraedit等工具查看class文件16进制编码,前面8个字节CA FE BA BE 是固定的,之后4个字节00 00 是次版本号,次版本号后面的4个字节00 33 是jdk的版本号;二是使用javap工具查看JDK编码。在获取JDK编码后,即可查询下表得知对应的JDK版本号。
(1)通过文本编辑工具查看
这里看到的major version是16进制。
(2)通过javap工具查看
这里major version是十进制。
版本号 | 对应十进制 | jdk版本号 |
---|---|---|
2E | 46 | jdk1.2 |
2F | 47 | jdk1.3 |
30 | 48 | jdk1.4 |
31 | 49 | jdk1.5 |
32 | 50 | jdk1.6 |
33 | 51 | jdk1.7 |
34 | 52 | jdk1.8 |
附:
高版本JDK编译出兼容低版本JDK的类:
例如使用JDK1.8版本,编译出1.7版本的class:
javac –source 1.7 –target 1.7 Xxx.java