根据前文 jvm之字节码解读——认识字节码 ,我们可知,java的字节码文件结构为
Magic Number(魔数)
根据上图可知,魔数在字节码文件里占据4个字节,由于1个十六进制占据4位,所以2个十六进制就占据1个字节,所以4个字节,就是占据8个十六进制,那么,魔数对应的字节码内容就是
魔数是一个固定的数值,它的意义在于能快速判断一个文件是不是字节码文件,如果不符合这种规则开头的,就不是字节码文件了
PS:魔数的定义为CAFE BABE,由来也挺有意思的,CAFE是咖啡,java的图标就是一个咖啡图案,CAFE BABE大概翻译成“咖啡宝贝”的意思
Version(版本号)
从文件结构可知,跟在魔数后面的4个直接,就是Version(版本号),它的内容为
其中,前面2个字节(0x00)是小版本号minor_version,后两个字节(0x34)是大版本号major_version
版本号的作用是,如果你用低版本的jdk来解析高版本的字节码,是会抛异常的(哪怕没用到高版本的特性)
ps:这里的0x34表示jdk1.8