您的位置:首页 > 编程语言 > Java开发

[笔记] 深入java虚拟机 - java class文件

2012-06-19 14:32 267 查看
ClassFile表

magic ----- class文件的前四个字节0xCAFEBABE

minor_version -------- 次版本号

major_version -------- 主版本号

constant_pool_count ------- 常量池列表中的入口个数+1(索引为0)

constant_pool ------常量池入口列表

access_flag -------- 类或接口的信息,例如是类或接口?final?abstract?public?

this_class --------- 值为常量池的一个索引,该索引的tag为constant_class,tag后紧跟的name_index为另一索引,该索引的tag为constant_utf8,其中包含这个类或接口的全限定名

super_class -------- 值为常量池索引,类型通this_class,除了Object外,super_class对所有的类均有效,Object的super_class为0, 接口的super_class为java.lang.Object.

interfaces_count ------- 该类直接实现或者由接口扩展的父接口的数量

interfaces -------- 数组,每一个值为父接口的常量池的索引,类型同this_class

fileds_count ------ 不包括从父类或接口继承的field,可能会包含class中没有声明的字段,这是因为java编译器可能在编译阶段向类或接口中添加了字段,例如为了保持对外部类示例的引用,java编译器会为每个外围类实例添加实例变量

fields ------- 包含了filed_info表, 包含字段名称,描述符和修饰符

methods_count ------ 方法的总计数,只包括类或接口显示定义的方法,不包括继承的
methods ------ 包括method_info表,方法名和描述符,如果方法不是本地或抽象的,则还包含局部变量所需的栈空间长度,为方法所捕获的异常表,局部变量表等。

attributes_count -------

attrbutes -------

常量池中的三种字符串:

全限定名 -- 例如java/util/Hashtable

简单名称 -- filed和method名称的简单表示

描述符 -- filed类型或者method的返回值和parameters,type用约定的B,C,D,F,I,J,S,Z,V,[,L等表示,例如 int i的描述符为I, int getSize(String s)的描述符为(java/lang/String)I

常量池info表

CONSTANT_Utf8_info表

表中各项如下

tag -- u1,CONSTANT_Utf8

length -- u2,bytes的字节数

bytes -- u1*length, 字符

CONSTANT_Integer_info表

tag -- CONSTANT_Integer_info

bytes -- u4, 按照高位在前的格式存储int类型值

CONSTANT_Float_info表

tag-- CONSTANT_Float_info

bytes -- u4, 按照高位在前的格式存储float类型值

CONSTANT_Double_info表

tag-- CONSTANT_Double_info

bytes -- u8, 按照高位在前的格式存储double类型值

CONSTANT_Long_info表

tag -- CONSTANT_Long_info

bytes -- u8, 按照高位在前的格式存储long类型值

CONSTANT_String_info

tag -- CONSTANT_String_info

string_infex -- u2,CONSTANT_Utf8_info表的索引

CONSTANT_Fieldref_info表

tag -- CONSTANT_Fieldref_info

class_index -- u2, 声明的字段的类或接口的CONSTANT_Class_info入口的索引

name_and_type_index -- u2, CONSTANT_NameAndType_info入口的索引,该入口提供了字段的简单名称和描述符

CONSTANT_Methodref_info表

tag -- CONSTANT_Methodref_info

class_index -- 被引用方法的类的CONSTANT_Class_info

name_and_type_index -- CONSTANT_NameAndType_info入口的索引,该入口提供了方法的简单名称和描述符

CONSTANT_InterfaceMethod_info表

tag -- CONSTANT_InterfaceMethod_info

class_index -- 被引用方法的接口的CONSTANT_Class_info

name_and_type_index -- 方法的简单名称和描述符

CONSTANT_NameAndType_info表

tag -- CONSTANT_NameAndType_info

name_index -- CONSTATNT_Utf8_info的入口索引,该入口给出了字段或方法的名称

name_and_type_index -- CONSTATNT_Utf8_info的入口索引,该入口给出了字段或方法的描述符

field_info表

class或Interface中声明的字段都会由class文件中的一个名为field_info的可变长度的表描述

access_flags -- private,public,protect,static,final,volatile,transient标志

name_index -- 名称的CONSTATNT_Utf8_info入口索引

descriptior_index -- 描述符的CONSTATNT_Utf8_info入口索引

attributes_count --

attributes --

method_info表

class或Interface中声明的方法都会由class文件中的一个名为method_info的可变长度的表描述

access_flags -- private,public,protect,static,final,volatile,native,abstract,synchronized,strictFP标志

name_index -- 名称的CONSTATNT_Utf8_info入口索引

descriptior_index -- 描述符的CONSTATNT_Utf8_info入口索引

attributes_count --

attributes --
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: