概念
- 对于进制类的字节码文件,计算机比人类更容易理解,而我们需要的就是制定文件的规则
- Class File Format,就是Class文件制定给JVM的规则
- idea字节码查看工具:sublime
基本核心参数说明:
- Magic Number ○ 魔术编号,用来标识这个是一个什么样的文件,比如Java的文件开头就是 cafe babe
- Minor Version ○ 版本小号
- Major Version ○ 版本主号
- constant_pool_count ○ 表示的是常量池里面有多少内容
- constant_pool ○ 长度为 constant_pool_count - 1 的表,因为数组是从0开始,常量池是从1开始,所以要减1 ○ 从1开始的原因:因为它有一个0存在,表示不指向任何常量池的一项,就可以用0表示,保留了一种可能性
- access_flags ○ 整个class文件的修饰符 ○ 例如整个class,你是用public修饰还是用privote修饰,这一类的标识
- this_class ○ 当前类叫什么名字
- super_class ○ 父类叫什么名字
- interfaces_count ○ 实现了哪些接口
- interfaces ○ 具体实现了哪些接口,接口的索引
- fields_count ○ 有哪些属性
- fields ○ 具体有哪些属性
- methods_count ○ 有哪些方法
- methods ○ 具体有哪些方法 ○ 也就是方法的各种结构,标识,名字的索引,附加属性等
- attributes_count - u2 ○ 附加属性的有哪些
- attributes ○ 附加属性的具体信息 ○ 最重要的是方法表,也就是方法的字节码指令,JVM会先读一些指令进来,然后根据指令去看自己的指令表,找到执行后再来看方法
fields属性参数
access_flags: 这个属性的修饰符,有没有static?有没有final?
name_index: 名称的索引
descriptor_index: 描述符,到底是什么类型的
attributes: 附加的一些属性,不一定有