本文重点
前面我们说了JVM就是class的规范实现,那么class规范究竟是什么呢?本文进行详细的介绍
class文件
首先我们需要知道当javac将文件编译为class文件之后,此时的class文件其实是二进制(要么0要么1),但是如果我们将其转变为16进制之后,它的形式就清晰一些,如下所示。
也就是说class文件就是上面的内容,这些内容不是随便写的,class的结构是被严格限制的,哪个字节代表什么含义,长度是多少,先后顺序如何,都不允许改变。下面我们简单介绍一下class文件中每一部分的含义是什么?
含义
class文件中包含下面的内容:
- Magic Number——魔数:确定这个文件是否为一个能够被虚拟机接受的Class文件(cafe babe)
- Minor Version——class文件的版本号(0000)
- Major Version——class文件的版本号(0034)
- constant_pool_count——常量池容量计数值,常量池可以理解为Class文件之中的资源仓库(0010),有constant_pool_count-1个常量,对于本例来说就是16-1=15个常量。
- constant_pool——常量池的具体内容,长度为constant_pool_c