Class 文件的基本介绍
class 文件是一组以8字节为基本单位的二进制流。各个数据按照顺序紧凑的排列在class文件之中。遇到大于8字节的数据会分成若干个8位数据。
下图就是class文件中的数据:
- 魔数:类的识别号,就好比 文件的尾缀。但是这里是放在前面。
- Class版本号:注意JDK可以向前兼容版本,但是无法向后兼容Class文件。
- Class文件常量池入口:注意与运行时的常量池区分,class文件常量池是 class 文件的资源仓库。常量池中存放字面量和符号引用。字面量是指 表明为final的常量,字符串等接近Java语言层面的常量含义。 符号引用则是 类、接口、方法的全名。Class文件是编译后产生的,在没有被执行(加载)之前,类里面不会存在方法和方法里的变量。所以,虚拟机运行时,都是需要到class文件常量池中获得方法的符号引用,从而找到方法入口。
- 访问标志:这个Class文件可被访问的信息,比方这个Class是类还是接口,是否 public 是否 Abstract 型、是否被声明为 final等。
- 索引:类索引、父类索引、接口索引;类索引就是这个类的全名,父类索引是父类全名,接口索引指向这个类的接口。
- 字段表集合:表示类级的成员变量的修饰信息,比如这个字段被什么所修饰(public final volidate)。需要注意的是这个字段表不会列出父类的字段。但是可能会有内部类的字段表。
- 方法表集合:方法表的存在,使得虚拟机在查询调用方法的速度上快了不少;方法的访问标志、方法名称索引。方法重载在Java语言中依靠方法名和特征签名来确定,所以此情况下。仅仅返回值的不同也会进行方法重载。但是在class 文件中,在方法名和特征签名一致的情况下,返回值类型的不同也会造成方法的并存。而不会覆盖父类的方法。
- 属性表集合:属性表很特殊,注意它是描述类的属性(下图一),有(code,ConstantVlaue......)这当中的一个,比如code就是一个属性表的表标题(下图二),表的内容又有很多属性描述。


Class 文件就基本介绍完了,点个赞就是兄弟喔...