在Class文件被加载的时候,检验其将进行许多检查,比如检查每隔class文件是否以0xCAFEBABE开头。
(这也是为什么Java的图标是一杯香浓的咖啡的原因吧)。编译器强制每隔class文件都以这样一个字节开可以很容易的分辨出某个文件是否有明显的问题。除此之外检验其还会确认class文件中声明的主版本号和次版本号,这个版本号必须在当前Java虚拟机可以支持的范围内。class文件中每个组成部分都声明了它的长度和类型。检验其可以根据组成部分的类型和长度确定整个class文件的正确的总长度,这样检验其很容易发现class文件内容是否有删节,尾部是否附带其他的字节等情况。这一趟的检验主要目的是保证这个字节序列正确的定义了一个新类型,它必须遵从Java的class文件的固定格式。如果检查没有问题后,class文件将被编译成方法去中的内部数据结构。后面的检查不是在符合class文件格式的二进制数据上进行,而是在方法区中的数据结构上进行的。