Java程序通过 Javac编译器 编译成 字节码( *.class ) 然后通过 Java虚拟机 去执行,其中的字节码文件就是接下来要学习的内容。
第一部分:Java虚拟机的无关性
1.平台无关性:在任何平台上只要安装虚拟机就可以运行。
平台无关性----是基于字节码。
2.语言无关性:任何语言都可以在虚拟机上运行。
语言无关性----是基于虚拟机和字节码存储格式。
第二部分:Class类文件的结构
类型 | 名称 | 数量 | 中文名称 |
u4 | magic | 1 | 魔数 |
u2 | minor_version | 1 | 次版本号 |
u2 | minor_version | 1 | 主版本号 |
u2 | constant_pool_count | 1 | 常量池 |
cp_info | constant_pool | constant_pool_count-1 | |
u2 | access_flags | 1 | 访问标识 |
u2 | this_class | 1 | 类索引 |
u2 | super_class | 1 | 父类索引 |
u2 | interfaces_count | 1 | 接口索引集合 |
u2 | interfaces | interfaces_count | |
u2 | fields_count | 1 | 字段表集合 |
field_info | fields | fields_count | |
u2 | methods_count | 1 | 方法表集合 |
method_info | methods | methods_count | |
u2 | attributes_count | 1 | 属性表集合 |
attribute_info | attributes | attributes_count |
1.class类文件存储数据的数据结构:(1)无符号数。(2)表。
(1)无符号数:基本上是数据类型,以u1,u2,u4,u8分别代表1个字节,2个字节,4个字节,8个字节,无符号数一般来表示,数字,索引引用,数量值,utf-8组成的值。
(2)表:它是由多个无符号数或其他表作为数据项构成的复合数据类型。
作用:描述有层次关系的复合结构的数据。
2.class类文件:它是一个有严格规定的文件,对于Class文件的数据项,对于顺序,大小,数量,都是有规定的,全部都能随意改变的。
第三部分:class文件中的魔数和版本号
魔数:每一个文件的头4个字节被称之为魔数,他的唯一作用是确定这个文件是否可以被虚拟机接受的class文件
class文件的版本号:第5和第6个字节代表次版本号。
第7和第8个字节代表主板本号。