概述
.java源文件经过编译生成的.class便是字节码文件,但还不能被系统直接执行,通过JVM解释翻译后才可以被底层系统执行。
字节码文件构成部分
1.魔数:头四个字节,CAFEBABE
2.文件版本:java版本1.8 = 52,1.7 = 51……
3.常量池:包含两部分 -- 字面量与符号引用
① 字面量:字符串文本、用final修饰的基本数据类型的值。(如申明的:String s = "abc";中的"abc",int i = 1;中的1)。大白话:字面量是在编译期间就已有确定值的数据。
② 符号引用:类、接口、方法、字段的全名与描述符。在编译时,java类并不知道引用类的实际内存地址,因此只能使用符号引用来代替。在类加载器链接阶段时才替换为具体的实际内存地址,即直接引用。
4.访问标志:(类、属性、方法)的访问标志
是class还是interface,是否public,是否abstract,是否定义了final等等。
5.类/父类索引与接口索引集合
类、父类、接口集合的全限定名。
6.字段表集合
声明的类变量与实例变量的描述与结构。
7.方法表集合
声明的方法的描述与结构。
8.属性表集合
描述class文件,字段表,方法表某些场景专有的信息。