第十五章-class类文件结构

时间:2022-06-05 14:37:53

参考博文:

(1)关于class的签名Signature

(2)关于访问标识

(3)关于Class中的Signature属性

(4)附录1 常量池解析

(5)附录2 方法解析

(6)Class文件结构

(7)关于class的签名Signature

(8)

1、简介

Java是一门跨平台的语言,可以做到“一次编写,到处运行(Write Once Run Anywhere)。这其中字节码(ByteCode)起到了至关重要的作用。Java虚拟机并没有和任何特定的语言绑定,但是要求运行在虚拟机这上的语言如Java、Scala等按照Java虚拟机规范《The Java Virutal Machine Specification》的要求,生成二进制Class文件格式者可以正常运行到虚拟机之上。例如,Java按照自己的语言规范《The Java Language Specification》将源代码翻译为Class文件格式。

其它的语言也能做到到处运行,但做不到一次编写,例如C语言在Linux平台上与Windows平台上创建线程时有不同的写法:

又或者编写了涉及到基本类型的位操作,C语言在不同平台、不同的操作系统数下其基本类型所占的字节是不同的。而Java无论在任何的平台下,其类型所占用的字节数是平定的,这得益于Java虚拟机为我们屏蔽了硬件差异。这大大简化了Java语言的使用。

2、Class文件头及常量池

2.1 魔术与版本

所有的Class文件开始的4个字节被称为魔术,其值是0xCAFFBABY,主要是起到标识作用。其它许多文件都会规定满足特定格式必须以某几个固定字节开头,如ZIP文件以2字节"PK"(0x504B)开头,因为Jar也是一种压缩文件,同样以"PK"字节开头。如果开始4字节不为0xCAFFBABY,则JVM将会认为该文件不是Class文件而拒绝解析。

魔术之后紧跟着Class文件的次版本号和主版本号。其中第5和第6个字节表示次版本号,第7和第8个字节表示主版本号。

2.2 常量池

3、访问标识与继承

4、字段及方法定义

5、Javac读取class文件

6、Javac生成class文件

相关文章