您的位置:首页 > 编程语言 > Java开发

在进行了解JAVA CLASS文件解析时必须要明白的三个概念

2008-12-18 10:21 549 查看
在讲Class[/b]文件的格式之前,要介绍三个概念:
1)数据类型:《JVM Spec》(2nded)中指出,Java[/b] Class[/b]文件的数据用自己定义的一个数据类型集来表示,即u1,u2,u4,分别用于表示一个无符号类型的、占1,2,4个字节的数据。在《Inside JVM》(2nded)一书中,作者把这个数据类型集称之为Class[/b]文件的基本类型,本人觉得比较形象,便于理解。所以,在本文中,我们也用基本类型来表示Java[/b] Class[/b]文件的数据。
2)表:根据《JVM Spec》(2nded)中的定义,表(table)由项(定义见3)组成,用于几种Class[/b]文件结构中。《JVM Spec》(2nded)中指出,Java[/b] Class[/b]文件格式用一个类似于C结构的记号编写的伪结构来表示。这个伪结构指的就是这里的表,例如下面的ClassFile表就是这种伪结构的一个典型例子,下文中所有的表都是指这种伪结构的表。表的大小是可变的,这是因为它的组成部分项是可变的。注意;这里的可变是针对Class[/b]层次而言的,即在不同的Class[/b]文件中该项的大小可能不一样的,但是对于每一个具体的Class[/b]文件来说,这个项的大小又是一定的,因而这个表的大小也是一定的。那么,项为什么是可变的呢?请看下面的分析。
3)项:描述Java[/b] Class[/b]文
件格式的结构的内容称为项(items)。每个项都有自己的类型和名称。项的类型可能是基本类型,也可能是一个表的名字,这种项都是一些数组项。数组项的
每一个元素都是一个表,这个表同顶层的ClassFile表一样,也都是一种伪结构,也都是由一些项构成的,而且这些表不一定是同一种格式的,因此数组项
也可以看作一个可变大小的结构流J。这些表对于该数组项来说就是子项,当然子项可能还有子项(目前子项的深度最多就两层)。项的名称,没有什么好说的,就
是《JVM
Spec》(2nded)中指定的一些名称。另外,项也是有大小的,对于没有子项的项来说,其大小是固定的;对于有子项的项来说,其大小是可变的。在一个
具体的Class[/b]文件中,一个可变项(数组)的大小都会在其前一项中指定,为什么会是这样的呢?因为《JVM Spec》(2nded)中就是这么定义的!在Class[/b]文件中,每个项按规范中定义好的顺序存储在Class[/b]文件中,相邻的项之间没有任何间隔,连续的项(数组)也是按顺序存储,不进行填充或者对齐,这样可以使Class[/b]文件紧凑。
好了,我想这三个概念我已经解释地比较清楚了,下面开始正式解析[/b]Class[/b]文件的格式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: