类文件结构
五、类文件结构
代码编译的结果从本地机器码变为字节码
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 内部类与宿主类之间的关联
才能这种东西 本来就是靠自己挖掘创造的 我也不是什么天才 我只是比任何人都拼命工作 一步一个脚印走过来了 等我回头一看 背后没有一个身影 那帮懒惰的人在山脚念叨着 谁叫那家伙是天才 开什么玩笑 我最讨厌悠哉悠哉长大的慢性子 比我有时间 有精力 感情丰富的人 为什么比我懒惰 那就给我啊 要把这些东西都浪费掉的话 就通通给我 我还有很多很多想创造的东西 给我啊--------摘自《legal high II》 与诸君共勉