##

前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

WX20180411-173230@2x

1、魔数

每个class文件开头的4个字节成为魔数,它的唯一作用就是识别它是一个什么文件,在git或者是jpeg等文件开头都有魔数的存在 ,因为仅仅通过扩展名来判断是不能保证正确性的, class文件的魔数值为 0XCAFEBABE (咖啡宝贝,很好记吧哈,16进制)

WX20180411-173534@2x

2、版本

接着就是版本号,前面2个字节是次版本,后面2个是主版本(0000 0034)JDK1.6 (其实也是相当于是根据选择的jar包来看的,我这里使用的jdk是1.8,但是项目中用到的jar为最高为1.6,所以这里显示为1.6了),

WX20180411-174304@2x

3、常量池

常量池可以理解为时class文件的资源仓库,它是class文件中与其他项目关联最多的数据类型,也是占用class文件空间最大的数据项目之一,同时它还是在Class文件中第一个出现的表类型数据项目

由于常量池中的常量数量是不确定的,所以在常量池的入口需要有两个字节用来代表常量池容量计数值(常量池索引从1开始)。 一共有14种常量类型,有着各自对应的结构,但开始的一个字节同样都是表示标志位,用来区分不同的类型。 下面为14种常量的具体类型和对应的标志位:

WX20180411-175349@2x

ContactAuthor