每一个class文件对应一个类或者接口,但是一个类或者接口不一定生成class文件,classloader直接生成。

  1. 8为字节为基础的二进制流,各个数据项按照严格的顺序排列在class文件中,没有任何分隔符,当遇到需要占用8位字节以上的数据项时,则会按照高位在前(或低位在前)方式分割为若干个8位字节存储。Big-Endian Little-Endian。
  2. 类似C语言结构体的微结构来存储数据,只包含无符号数和表两种结构。
    • 无符号数:u1,u2,u3,u4代表响应字节大小的无符号数,用来描述数字,索引引用,数量值(数字的值)或者按照UTF-8编码的字符串值。
    • 表:由无符号数和其它标组成的符合数据类型。class本质上就是一张表

  • 魔数和Class文件版本:
    class文件的头四个字节成为魔数(oxCAFEBABY),确定是否可以被虚拟机接受,多数文件存储标准都采用这个形式。紧接着的四个字节为版本号,5和6为此版本号(Minor Version),7和8为主版本号(Major Version),版本号从45开始,JDK1.1之后每个大版本发布,主版本号加1.
  • 常量池(大小不定):class文件的资源仓库,占用空间比较大,和其它数据项交互多,第一个出现表类型数据的数据项。

    • u2类型容量计数constant_pool_count,1开始,0项常量空出,指代不引用任何一个常量项目;
    • 数据类型:字面量(Literal)---接近常量概念,文本字符,final变量;符号引用(加载class文件是进行动态链接)---类和借口的全限定名、字段的名称和描述符、方法的名称和描述符。
    • 常量池中每一个常量都是一个表,u1标志位标识属于哪种数据类型。11 + 3.
  • 访问标志(2字节):
  • 类索引、父类索引与接口索引集合:

    • 类索引(this_class):u2数据类型,确定类的全限定名,
    • 父类索引(super_class):u2数据类型,确定父类全限定名,只有一个(单继承),除了Object,其它都有父类,父类索引不为0,
    • 接口索引(interfaces):u2类型数据集合,实现的接口,按照implements后的顺序排列在接口索引集合中,第一项u2为接口计数器(interfaces_count)标识索引表容量,没有则为0
  • 字段表(field_info)集合:类或者接口生命的变量,包括类级及接口级变量,不包含局部变量。
    • name_index(常量池引用):字段简单名称(没有类型和参数修饰符的方法或者字段名称, 对比权限定名--com/xxx/xxx;)
    • descriptor_index(常量池引用):字段描述符,字段数据类型,方法参数列表(数量、类型、顺序)和返回值(保持先后顺序)
      字段二维数组描述:String[][]=>[[Ljava/lang/String;方法描述符:int getIndex(String[], String ele)=>([Ljava/lang/StringLjava/lang/String)I
  • 方法表集合:...
  • 属性表集合:...

最新文章

  1. 点击.box跟点击.box.box1
  2. SQL Server 2008 R2——创建函数 筛选出字符串中的数字 筛选出字符串中的非数字
  3. hdu 1049 Climbing Worm
  4. ABAP之DIALOG
  5. android软键盘的用法总结
  6. [转]python对json的相关操作
  7. 新安装的linux(linux mint 或则ubuntu)系统中安装postgresql-xc安装的包
  8. jquery事件绑定
  9. spring 定时任务 taskScheduler详解
  10. TF-IDF 提取关键词
  11. FHQ Treap小结(神级数据结构!)
  12. fabric 安装
  13. dedecms 自增数使用方法
  14. spring cloud学习(三)使用Ribbon实现客户端负载均衡
  15. Jsch - java SFTP 文件上传下载
  16. 一分钟让你学会使用Android AsyncTask
  17. word转pdf(使用office)
  18. P1546 最短网络(codevs | 2627村村通)
  19. ov5640 i2c通信异常问题
  20. RouterOS DNS劫持(转)

热门文章

  1. C语言 第二章 数据类型、变量和输入函数
  2. Zookeeper数据模型及其应用
  3. BizTalk Server 2016
  4. Rafy 领域实体框架 - 领域模型设计器(建模工具)设计方案
  5. Microsoft Visual Studio 2008 未能正确加载包“Visual Web Developer HTML Source Editor Package” | “Visual Studio HTM Editor Package”
  6. 为jQuery写插件
  7. Windows Service--Write a Better Windows Service
  8. node.js 的事件驱动
  9. JavaScript类属性
  10. [翻译]用 Puppet 搭建易管理的服务器基础架构(4)