Java基础知识之Class结构
来源:互联网 发布:linux grep命令 递归 编辑:程序博客网 时间:2024/06/15 23:01
每一个Class文件都对应着唯一一个类或接口的定义信息,但是相对地,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成)。
每个Class文件都是由8字节为单位的字节流组成,所有的16位、32位和64位长度的数据将被构造成 2个、4个和8个8字节单位来表示。
多字节数据项总是按照Big-Endian的顺序进行存储。
在Java SDK中,访问这种格式的数据可以使用java.io.DataInput、java.io.DataOutput等接口和java.io.DataInputStream 和java.io.DataOutputStream等类来实现。
在Java SDK中这些类型的数据可以通过实现接口java.io.DataInput 中的readUnsignedByte、readUnsignedShort和readInt方法进行读取。
u1,u2,u4分别代表了1,2,4个字节的无符号书。
1 ClassFile文件
每一个ClassFile都对应着一个结构体
ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count];u2 methods_count; method_info methods[methods_count];u2 attributes_count; attribute_info attributes[attributes_count]; }
magic:确定这个是否被虚拟机所接受的Class文件。魔数值固定为0xCAFEBABE,不会改变。
minor_version,major_version:表示Class文件的副、主版本。
constant_pool_count:常量池计数器,constant_pool_count的值等于constant_pool表中的成员数加1。constant_pool表的索引值只有在大于0且小于constant_pool_count时才会 被认为是有效的②。
constant_pool:常量池主要存放两大类常量:字面量和符号引用。常量池,constant_pool是一种表结构(§4.4),它包含Class文件结构及其子结构中引用的所有字符串常量、类或接口名、字段名和其它常量。常量池中的每一项都具备相同的格式特征——第一个字节作为类型标记用于识别该项是哪种类型的常量,称为“tag byte”。常量池的索引范围是1至constant_pool_count−1。
符号引用:类和接口的全限定名,字段的名称和描述符,方法的名称和描述符。
access_flags:访问标志,是一种掩码,用来表示一种类或者接口的访问权限和基础属性。
this_class:类索引,this_class的值必须是对constant_pool表中项目的一个有效索引值。constant_pool表在这个索引处的项必须为CONSTANT_Class_info类型常量。
super_class:父类索引,对于类来说,super_class的值必须为0或者是对constant_pool表中项目的一个有效索引值。
interfaces_count 接口计数器,interfaces_count的值表示当前类或接口的直接父接口数量。
fields_count:字段计数器,fields_count的值表示当前Class文件fields[]数组的成员个数。fields[]数组中每一项都是一个field_info结构(§4.5)的数据项,它用于表示该类或接口声明的类字段或者实例字段
fields[]: 字段表,fields[]数组中的每个成员都必须是一个fields_info结构(§4.5)的数据项,用于表示当前类或接口中某个字段的完整描述。fields[]数组描述当前类或接口声明的所有字段,但不包括从父类或父接口继承的部分。
methods_count :方法计数器,methods_count的值表示当前Class文件methods[]数组的成员个数。Methods[]数组中每一项都是一个method_info结构(§4.5)的数据项
methods[]:方法表,methods[]数组中的每个成员都必须是一个method_info结构(§4.6)的数据项,用于表示当前类或接口中某个方法的完整描述。
attributes_count 属性计数器,attributes_count的值表示当前Class文件attributes表的成员个数。
attributes[] 属性表,attributes表的每个项的值必须是attribute_info结构(§4.7)。在本规范里,Class文件结构中的attributes表的项包括下列定义的属性:
- Java基础知识之Class结构
- java class的结构
- java class类结构
- Java Class文件结构
- Java Class文件结构
- java class文件结构
- Java Class文件结构
- Java Class文件结构
- java class文件结构
- java class文件结构
- java class文件结构
- Java Class文件结构
- java class文件结构
- java 反射基础知识class类
- 《深入Java虚拟机》导读之五: Class文件结构
- 【深入Java虚拟机】之二:Class类文件结构
- 【深入Java虚拟机】之二:Class类文件结构
- 【深入Java虚拟机】之二:Class类文件结构
- 额特然图一5有人有人特与人同意
- XML中DTD,XSD的区别与应用
- POJ 3282 Ferry Loading IV(简单模拟)
- 单例模式的七种写法
- ListView,CursorAdapter,ContextMenu之间的映射关系学习笔记。
- Java基础知识之Class结构
- poj3159(差分约束)
- Orz教主第五次模拟(做题情况+题目分析+代码)[未完]
- springMVC源码下载
- UVa 11538 - Chess Queen (组合数学)
- editplus创建时候的几个注意事项
- 线段树模板
- day01
- HDU 4952 Number Transformation 数论