各种不同平台的虚拟机与所有平台都统一使用的程序存储格式--字节码,是构成平台·无关性的基石。
Class文件是一组以8位字节为单位的二进制流。
首先,class文件的前四个字节是魔数,唯一作用就是确定这个文件是否为一个能被虚拟机接受的class文件。之后是版本号,分别是两个字节的主版本号,两个字节的次版本号。
紧接着,版本号的是常量池的入口,(存放:字面量,符号引用【类和接口的全限定名,字段名称和描述符,方法名称和描述符】))
补充:Java程序中,超过64KB英文字符的变量或者方法名,无法编译的原因是:Class文件中方法,字段都需要引用CONSTANT Utf8 info 型常量来描述名称,所以CONSTANT Utf8 info型常量的最大长度就是限制其的因素,而其的最大长度就是u2类型所能表示的最大值,65535,所以才有这个限制。
而在常量池结束之后,紧接着的两个字节,是访问标志 ,识别类或者接口的访问信息。
在之后,分别是:类索引(类全限定名),父类索引(父类全限定名),索引集合(实现了哪些接口)
之后--字段表集合,描述接口或者类中声明的变量,不包括方法内部声明的局部变量。
----方法表集合