JVM 进阶 (十八)——初识 Class 文件
关于类加载机制的相关知识在前面的博文中暂时先讲那么多。中间留下了很多问题,从本篇博文开始,我们来一一解决。
从我们最陌生而又最熟悉的.class
文件开始说起。.class
文件是一个由 8 位二进制构成一个字节的字节码文件,里面的格式都是按照规定好的顺序紧凑的排列在文件中。
在.class
文件中,数据都是以无符号数和表的形式存储的,后面所进行.class
文件的分析就是以这个为基础的,所以我们先了解一下基本的概念。
无符号数用来描述一些东西,比如字符串值、索引、数字、数量值等等。并且使用 u1,u2,u4,u8 来表示 1 个字节,2 个字节,4 个字节,8 个字节。
表就是由多个无符号数或者其他的表来构成的一种复合型的数据结构。
整个.class
文件就是一张很大的表,这张表的数据项如下:
先来大概解释一下,这张表是以一个 4 个字节的魔数作为开始。魔数只是.class
文件的一个‘身份识别’,唯一的作用就是确定这个文件是否是一个能被虚拟机接受的 class 文件,虚拟机中目前将他的值定义为“0xCAFEBABE”(这里以 16 进制表示)。不只是 class 文件才有魔数,其他的一些文件也有,如一些图片的文件头中也有魔数。
既然是以魔数开头,那我们就打开任意一个.class 文件来看看是怎么一回事吧!这里我采用的工具是 JavaClassViewer。他能将我们看不懂的字节码文件转成 16 进制显示,点击下载。
好,现在我们现在打开任意一个文件看看:
如图,这就是 class 文件的结构,以魔数开头。现在看不懂没关系,以后我们慢慢解释。大家可以下载该工具先好好体验一下。
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/313fe58c26a16642985e07771】。文章转载请联系作者。
评论