五、类文件结构
代码编译的结果从本地机器码变为字节码
JAVA编译器可以把java代码编译成存储字节码的Class文件
Class文件是一组以8位字节为基础单位的二进制流,是一种类似C语言结构体的伪结构,只有两种数据类型:无符号数和表
Class文件的组成
1.魔数 身份识别 +版本号
2.常量池 与其他项目关联最多、占据空间最大、class中第一个出现的表类型的数据项目 主要存放两大类常量:字面量和符号引用
2.1字面量一般指字符串常量、final变量等
2.2符号引用包含类和接口的全限定名、字段的名称和描述符、方法的名称和描述符
ps java代码是在JVM加载类的时候动态链接的!
3.访问标志
这个class是类还是接口,是否是public或者abstract或final
4.类索引(确定类的全限定名)、父类索引(确定父类的全限定名)、接口索引(描述这个类实现了哪些接口)
由这三项来确定类的继承关系
5.字段表的集合(描述接口或类中声明的变量不包含方法中的变量)
6.方法表的集合(不包含方法中的代码 代码存在属性表的code属性中)
7.属性表集合
7.1code java方法体中的代码经javac编译后的字节码存放在code属性中
7.2Exception 方法中可能抛出的异常
7.3 LineNumberTable Java 源码行号与字节码行号对应关系
7.4LocalVariableTable 栈帧中局部变量表与源码中定义的变量之间的关系
7.5SourceFile 生成该class文件的源码文件名称
7.6ConstantValue 通知虚拟机自动为静态变量赋值
7.7Inner Class 内部类与宿主类之间的关联