Class文件解析(未完)

1. java虚拟机的平台无关性和语言无关性

我们知道,c,c++等语言的编译器直接将源代码文件编译成了二进制的本地机器码,然后由计算机来执行。是一种平台相关的语言。

Class文件解析(未完)

而,java是平台无关的,号称“一次编译,到处运行”,主要是java虚拟机的功劳,虚拟机使用统一的程序存储格式—字节码,是构成平台无关性的基石
而且,java虚拟机还具有语言无关性的特点,作为一个通用的、机器无关的执行平台, 任何其他语言的实现者都可以将Java虚拟机作为语言的产品交付媒介。例如,使用Java编译 器可以把Java代码编译为存储字节码的Class文件,使用JRuby等其他语言的编译器一样可以 把程序代码编译成Class文件,虚拟机并不关心Class的来源是何种语言。
在Java语言之外发展出一大批在Java虚拟机之上运 行的语言,如Clojure、Groovy、JRuby、Jython、Scala等

Class文件解析(未完)

2. 解析Class文件的结构

Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地 排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎 全部是程序运行的必要数据,没有空隙存在。

2.1 Class文件的数据结构:

Class文件格式采用一种类似于C语言结构体的伪结构来存 储数据,这种伪结构中只有两种数据类型:无符号数和表

Class文件解析(未完)

2.2 构成Class文件的数据项

Class文件解析(未完)

2.3 使用十六进制编辑器WinHex打开的Class文件:

Class文件解析(未完)

2.4 图解 Class文件构造(大致结构)

Class文件解析(未完)