class文件结构学习笔记

1 篇文章 0 订阅

 


class文件结构学习笔记

这几天看了深入理解java虚拟机,刚刚呓class文件胡结构,内容不难,但是比较多,于是想写篇csdn记录一下

 

一、Class文件的总体格式

 

前面部分的结构描述

各个部分介绍

magic: 魔数 必须为 0XCAFEBABE  

java 次版本号: jdk1.2 之后到 12 都是 0 java 主版本号: java1 是 45,每次加一个版本加一, 比如 java6 是 50, java13 是 57   我们可以得到公公式 jdk 版本号 = 主版本号 – 44(逝世)

常量池长度 C:常量池的常量索引是 1 到 C-1  所以常量个个数实际上是 C-1

常量池的常量分类:  

    

    

cp_info结构:

    截至JDK13,一共有17种不同类型的常量, 每种不同的类型都有着独立胡数据结构,但是他们的第一项都是一个U1的tag,用于指定该常量的类型

    

 

   

 

 

 

注:JDK1.0.2 之后编译出的类的 ACC_SUPER 标志必须为真 

 

 

属性表集合 attributes  用于存储一些额外的信息,属性表集合不要求各个属性表按照严格的顺序,而且任何人 实现的编译器可以写入自定义的属性信息,java 虚拟机运行时会忽略他不认识的属性,而且 属性不能够重复 
 
 
字段表集合中不会列出从父类或者父接口中继承而来的字段,但是有可能出现原来 java 代 码中不存在的字段,比如,内部类为了保证对外部类的访问性,编译器会自动添加指向外部 类实例的字段. java 的字段是无法重载的, 而 class 文件格式中只要两个字段描述符不完全 相同,即使他们重名,也能合法共存,方法表的结构如下


 与字段表集合对应地,若父类的方法在子类中没有重写,则不会出现在子类 class 文件的方 法表集合中,同样的,有可能会出现编译器自动添加的方法,最常见的是便是类构造器 ‘<clinit>()’方法. 在 java 语言中,方法的特征签名只包括方法名称和参数列表的数量,顺 序,类型. 而不包括返回类型,所以 java 中不允许通过在返回类型重载函数,而 java 虚拟机 规范中规定的字节码层面的特征签名还包括了返回类型,所以有相同的名称和特征签名,但 是返回值不同的方法表,也是可以存在同一个 class 文件中(即方法描述符和方法名字不都 一样即可合法共存

 

 

 

我们列举一下code属性的结构

 

 


总结

只是做一下笔记并且分享一下

建议喜欢的朋友们在读懂class文件的整体框架的前提下 建议把这些表格收藏起来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值