JVM 之 class文件

目录

class文件

class文件中有两种数据类型:无符号数和表

class文件信息

1.魔数

2.class文件版本

3.常量池

4.访问标志

5.类索引,6.父类索引

7.接口索引集合

8.字段表集合

9.方法表集合

10.属性表集合

class文件设计理念及意义


class文件

一个二进制流文件。各个数据严格按照顺序排列,中间没有添加任何分隔符。以字节为单位(8bit)。

如果遇到8bit以上的空间的数据项,则会按照高位在前的方式分割成若干个字节进行存储。

class文件中有两种数据类型:无符号数和表

class文件信息

1.魔数

    大小:
   
四个字节
    内容:
    CAFEBABE
    作用:
    区分文件类型。JVM开始读取的地方。

2.class文件版本

    四个字节为JDK版本。jdk1.8为52,大于52,就是jdk版本大于1.8。   

3.常量池

    长度:2字节

    数据结构
    CP_info 
    带图片的解释示例

    工具查看
    javap -verbose hello.class

4.访问标志

    长度:2字节
    类型: 
    
    
     interface默认会加一个abstract

5.类索引,6.父类索引

    单继承,所以只有一个
    长度:2字节
    指向常量池的位置
    0001 表示指向常量池中第一个位置

7.接口索引集合

    长度:2字节
    作用:元素个数
    内容索引长度: 2字节
    指向常量池中对应的位置

8.字段表集合

    用于描述接口或者类中声明的变量

    长度:2字节
    作用:字段数量
    field_info,用到常量池
    对象类型加L
    数组加[
    对象数组[L
    带图解释示例

9.方法表集合

    长度:2字节
    作用:方法数量
    类似于字段表,但是只存储方法标签,具体方法体存在属性表的code属性中
   带图解释示例

10.属性表集合

    长度:2字节
    作用:属性个数
    其中有预定义字段和自定义字段
    带图解释示例

class文件设计理念及意义

1.面向接口编程(提出规范,实现由服务提供者编写)
2.最终使用字节码在JVM运行,与平台无关。通过自定义编程语言和编译器,生成符合规范的字节码就可以在JVM中运行。

类似于用c++写代码时,使用自定义报文格式解析报文一样。

发布了155 篇原创文章 · 获赞 11 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u013919153/article/details/105285566