搜索
写经验 领红包
 > 社会

javaclass文件结构(java的class文件存放在哪)

导语:Java类class文件结构解析

一个java类被编译成class之后通过类加载器加载到Jvm中运行,那么class文件到底是什么样的?

下面给一个简单的Java类Test.java

public class Test

{

private int n;

public int getN(){

return n++;

}

}

直接用javac Test.java编译输出Test.class文件,用WinHex打开class文件查看它的字节码内容如下:

Test.class字节码内容

上图显示的是十六进制显示的class内容。

1、 开头的4个字节的十六进制字符0xCAFEBABE被称之为“魔数”值,简单的说就是java的制定者用来标注Test文件为java类文件,是一个标识,就像.txt后缀的文件为文本文件一样,这个魔数值在类字节码前边做标识。

2、第5个和第6个的值为0x0000,即0代表jdk的小版本号。

3、第7个和第8个的值为0x0034,即十进制的52,表示jdk的主版本号,说明该class文件为jdk1.8版本编译。

4、接着主版本号标识的是常量池入口,第9、10两个字节0x0013,即常量池容量为19,常量池中有19-1=18个常量,索引为1-18,不是0-17,其中0的位置空了出来做一些特殊标记处理。

5、接下来是常量池数据,常量池中第一项为tag标记位0A,即十进制10,对应常量池数据项目类型的CONSTANT_Methodref_info常量项,一直到181字节都是常量池的内容。

6、之后是182-183两个字节代表访问标志access_flag,用于识别访问的是类还是接口,是什么样的类或者接口,是否被定义为public的、abstract的、final的。

7、之后184-185表示类索引,186-187表示父类索引,188-189表示接口索引信息。

9、第 190 - 199 个字节表示字段表信息,第 200 - 289 个字节表示方法表的信息。

10、再之后是属性表信息。

本文内容由小欣整理编辑!