java虚拟机之class文件说明

2017-01-21  本文已影响17人  吴世浩

一、背景

今天修改一个比较旧的代码,jdk1.5的项目,所以编译需要1.5的jdk,但是我从1.7上切会1.5的时候编译后的代码还是1.7的,也就是查看到二进制码0033,最后才发现是下面这里没改造成的。顺便也记载下class文件结构

二、问题

Paste_Image.png

这里的编译级别没有进行修改早餐的
查看代码的jdk版本方式,直接用文本打开class如下图所示


Paste_Image.png

jdk版本对应的部分型号如下

34(对应十进制的50):JDK1.8
33(对应十进制的50):JDK1.7
32(对应十进制的50):JDK1.6
31(对应十进制的49):JDK1.5

idea中我电脑配置的是1.8的jdk,可是编译后的一直是1.7的效果

class

然后在启动tomcat报错如下:


image.png

最后在配置tomcat的页面:

image.png

这里有个jre的选项,本地是1.8的环境,编译的class是1.7的,但是怎么会报错了,高版本应该兼容低版本的。不过把这里改成1.8的就好了

三:class文件说明

3.1 class开头0-4
class文件的头4歌子节称为魔术,他的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件。使用魔数不是拓展名来进行识别主要是基于安全方面的考虑,因为文件的拓展名可以随意地改动。
3.2 5-8位意义
5-8位是Class文件的版本号,第5和第6字节是此版本号,第7和第8字节是主版本号。

四:浩语

                                           __                                                        
                            __  _  ____ __|  |__ _____    ___
                            \ \/ \/ /  |  \  |  \\__  \  /  _ \   
                             \     /|  |  /   Y  \/ __ \(  <_> )
                              \/\_/ |____/|___|  (____  /\____/ 
                                                    \/     \/          
                                 任何事情都是要靠努力和用心。                                                   
上一篇 下一篇

猜你喜欢

热点阅读