魔数与Class文件的版本
魔数
每个Class
文件的头4个字节被称为魔数(0xCAFEBABE
),唯一的作用就是确定这个文件是否为一个能被虚拟机接受的Class
文件。
使用魔数而不是扩展名主要基于安全考虑,因为文件扩展名可以随意改动。文件格式的制定者可以自由地选择魔数值,
只要这个魔数值还没有被广泛采用过而且不会引起混淆。
文件版本
魔数后是文件版本,第5和第6个字节是次版本号(Minor Version
),第7和第8个字节是主版本号(Major Version
).
高版本的JDK
能向下兼容以前版本的Class
文件,但是不能运行以后版本的Class
文件。
《Java
虚拟机规范》在Class
文件校验部分明确要求了即使文件格式并未发生任何变化,虚拟机也必须拒绝执行
超过其版本号的Class
文件。