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文件的结构,以魔数开头。现在看不懂没关系,以后我们慢慢解释。
大家可以下载该工具先好好体验一下。