Java class文件读书摘要(一)

1、  java class文件是什么?

Java class文件是对java程序二进制文件格式的精确定义,每一个java class文件都对一个java类或者java接口作出了全面描述。

一个class文件只能包含一个类或者接口。

无论java class文件在何种系统上产生,无论虚拟机在何种系统上运行,对java class文件来的精确定义使得所有java虚拟机都能够正确的读取和解释所有java class文件。

2、  class文件的内容

java class文件中包含了java虚拟机所需要知道的、关于类或者接口的所有信息。

Magic:每个java class文件的前4个字节被称为它的魔数:0xCAFEBABE。魔数用来区分是否class文件。

Minor_versionmajor_versionclass文件的下面4个字段包含了主、次版本号。

Constant_pool_countconstant_pool:在class文件中,魔数和版本号后面的是常量池。

Access_flags:紧接常量池后的两个字节称为access_flags,它展示了文件中定义的类或者接口的几段信息。例如,访问标志指明文件中定义的是类还是接口;访问标志还定义了在类或接口的声明中,使用了哪种修饰符;类和接口是抽象的,还是公共的。

This_class:接下来的两个字节为this_class项,它是一个对常量池的索引。在this_class位置的常量池入口必须为constant_class_info表。该表由标签和name_index两个部分组成,标签部分是一个具有constant_class值的常量,在name_index位置的常量池入口为一个包含了类或者接口全限定名的constant_utf8_info表。

Super_class:在class文件中,紧接在this_class之后的是super_class项,它是一个两个字节的常量池索引。在super_class位置的常量池入口是一个指向该类超类全限定名的constant_class_info入口。

Interfaces_countinterfaces:紧接着super_class的是interfaces_count。此项的含义为:在文件中由该类直接实现或者由接口所扩展的父的接口的数量。在这个计数的后面是名为interfaces的数组,它包含了对每个由该类或者接口直接实现的父接口的常量池索引。

Fields_countfields:在class文件中,紧接在interfaces后面的是对在该类或者接口中所声明的字段的描述。首先是名为fields_count的计数,它是类变量和实例变量的字段的数量总和。在这个计数后面的是不同长度的field_info表的序列。只有在文件中由类或者接口声明了的字段才能在fields列表中列出。另一方面,fields列表可能会包含在对应的java源文件中没有叙述的字段,这是因为java编译器可能会在编译时向类或者接口添加字段。

Methods_countmethods:在class文件中,紧接着fields后面的是对在该类或者接口中所声明的方法的描述。首先是名为methods_count的计数,它是一个双字节长度的对于该类或接口中声明的所有方法的总计数。

Attributes_countattributesclass文件中最后的部分是属性,它给出了在该文件中类或者接口所定义的属性的基本信息。

待续......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值