当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

CLASS 文件格式

发表于: 2011-07-04   作者:诸葛不亮   来源:转载   浏览次数:
摘要:     Java class 文件 1、Class文件是什么:class文件是java程序二进制文件的精确的定义,每一个class的文件都对应一个类或则接口,class文件是JVM真正能读懂的文件格式。 2、Class文件与java的关系:一般的讲class文件由java的类文件编译而来,但是事实上class文件只是定义的一种格式,你甚至可以手动编写二进制文

 

 

Java class 文件

1、Class文件是什么:class文件是java程序二进制文件的精确的定义,每一个class的文件都对应一个类或则接口,class文件是JVM真正能读懂的文件格式。

2、Class文件与java的关系:一般的讲class文件由java的类文件编译而来,但是事实上class文件只是定义的一种格式,你甚至可以手动编写二进制文件,只要能满足class文件的定义,就可以由JVM解析,执行。

3、Class 文件概况:1、是由8位字节的二进制流,2、高位在前的形式;3、数据项之间没有间隔,保持文件的紧凑。

 

4Class 的文件数据类型:

4.1、     class 文件的基础数据类型

 

U1

1个字节,无符号类型

U2

2个字节,无符号类型

U4

4个字节,无符号类型

U8

8个字节,无符号类型

 

4.2、复合数据类型:复合数据类型是有一个或者多个具有具体定义的基础数据类型或者复合数据类的组成的结构体;可以将复合数据类型分为4类:

4.2.1、   cp_info 类型:cp_info是定义常量池的数据格式,一共有11种具体的格式;通用格式如下:

 

类型

名称

数量

U1

Tag

1

U1

info

根据tag的值决定 

(1)、  constant_utf8_info:存储四种基本信息类型,文字字符串,定义的类或者借口的描述,其他类或者接口的符号引用以及属性相关的字符串,具体的格式如下:

 

类型

名称

数量

说明

U1

tag

1

标志值为10x 01

U2

Length

1

后续bytes项的长度

U?

bytes

length

变体UTF8格式的数据

 

(2)、  constant_integer_infoint类型的值

 

类型

名称

数量

说明

U1

tag

1

标志值为30x 03

U4

bytes

1

高位在前格式的int

 

(3)、  constant_float_infofloat类型的值

 

类型

名称

数量

说明

U1

tag

1

标志值为40x 04

U4

bytes

1

高位在前的float

 

(4)、  constant_long_infolong类型的值

类型

名称

数量

说明

U1

tag

1

标志值为50x 05

U8

bytes

1

高位在前的long

 

(5)、  constant_double_info:double的值

 

类型

名称

数量

说明

U1

tag

1

标志值为60x 06

U8

bytes

1

高位在前的long

 

(6)、  constant_class_Info:使用符号引用表示类或者接口。

 

类型

名称

数量

说明

U1

tag

1

标志值为70x 07

U2

Name_index

1

包含类或者接口的全限定名的constant_utf8_info的索引

 

(7)、  constant_string_info:文字字符串者java.lang.string的实例

 

类型

名称

数量

说明

U1

tag

1

标志值为80x 08

U2

String_index

1

包含文字字符串值的constant_utf8_info的索引

 

(8)、  constant_fieldref_info:指向字段的符号引用;

 

类型

名称

数量

说明

U1

tag

1

标志值为90x 09

U2

Class_indx

1

被引用字段的类或者接口constant_utf8_info的索引

U2

Name_and_type_index

1

提供constant_nameandtype_info的索引

 

(9)、  constant_method_info:方法的符号引用

 

类型

名称

数量

说明

U1

tag

1

标志值为100x 0A

U2

Class_indx

1

被引用字段的类或者接口constant_utf8_info的索引

U2

Name_and_type_index

1

提供constant_nameandtype_info的索引

 

(10)、     constant_interfaceMethodref_info:接口中申明的方法的符号引用

 

类型

名称

数量

说明

U1

tag

1

标志值为110x 0B

U2

Class_indx

1

被引用字段的类或者接口constant_utf8_info的索引

U2

Name_and_type_index

1

提供constant_nameandtype_info的索引

 

(11)、     constant_nameandtype_info:提供引用字段或者方法的简单名称和描述符的常量池入口

 

类型

名称

数量

说明

U1

tag

1

标志值为120x 0C

U2

name_indx

1

被引用字段的类或者接口constant_utf8_info的索引

U2

Descriptor_index

1

被引用字段的类或者接口constant_utf8_info的索引

 

4.2.2     field_info:定义在类或者接口中声明的每一个字段;具体格式:

 

类型

名称

数量

说明

U2

Access_flags

1

申明字段的修饰符

U2

name_indx

1

简单名称的constant_utf8_info的索引

U2

descriptor_index

1

字段描述符的constant_utf8_info的索引

U2

Attributes_count

 

Attribute_info的数量

Attribute_info

attributes

Attributes_count

Attribute_info的列表

 

4.2.3     method_info:定义在类或者接口中声明的方法

 

类型

名称

数量

说明

U2

Access_flags

1

修饰符

U2

name_indx

1

方法简单名称的constant_utf8_info的索引

U2

descriptor_index

1

方法描述符的constant_utf8_info的索引

U2

Attributes_count

 

Attribute_info的数量

Attribute_info

attributes

Attributes_count

Attribute_info 的列表

 

4.2.4     attribute_infojvm 规范一共定义了9中属性

 

 

 

类型

名称

数量

说明

U2

Attribute_name_index

1

属性名称的constant_utf8_info的索引

U4

Attribute _length

1

属性数据的长度,不包含开始的6个字节

U1

info

1

数据

 

5、特殊字符串常量池中包含有三种特殊的字符串:全限定名,简单名称和描述符;

所有的符号引用都包括类或者接口的全限定名,字段的符号引用除了全限定名之外,还有简单字段,和字段的描述符;方法的符号引用除了全限定名之外,还有简单方法和描述符;

  • 全限定名:常量池入口指向类或者接口的时候,给出类或者接口的全限定名,如:java/lang/object ./替换
  • 简单名称:字段名或者方法名以简单名称出现在常量池,如:java.lang.systemjava.io.printstream out 在常量池中为out
  • 描述符:字段的描述符给出字段的类型,方法的描述符,给出方面的返回值和方法的参数的数量、类型和顺序

 

6、class 文件的内容格式: 按照先后顺序依次为下表的结构!

类型

名称

数量

说明

U4

magic

1

魔数

U2

Minor_version

1

次版本号

U2

Major_version

1

主版本号

U2

Constant_pool_count

1

常量池的数量

Cp_info

Constant_pool

Constant_pool_count-1

常量池

U2

Access_flags

1

类的访问标志信息

U2

This_class

1

指向当前类的常量索引

U2

Super_class

1

指向父类的常量的索引

U2

Interfaces_count

1

接口的数量

U2

Interfaces

Interfaces_count

Interface的常量索引

U2

Fields_count

1

字段数量

Field_info

fields

Fields_count

字段的信息

U2

Methods_count

1

方法的数量

Method_info

methods

Methods_count

方法的信息

U2

Attributes_count

1

属性的数量

Attributes_info

attributes

Attributes_count

属性的信息

 

 

 

 

本站支持 pay for your wishes

CLASS 文件格式

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
java class文件格式解析收藏 1.目的 大型软件系统开发时,某些Java组件可能涉及到多种数据库或中间
1.目的 大型软件系统开发时,某些Java组件可能涉及到多种数据库或中间件系统的连接和应用,例如一
1.目的 大型软件系统开发时,某些Java组件可能涉及到多种数据库或中间件系统的连接和应用,例如一
1.目的 大型软件系统开发时,某些Java组件可能涉及到多种数据库或中间件系统的连接和应用,例如一
1.目的 大 型软件系统开发时,某些Java组件可能涉及到多种数据库或中间件系统的连接和应用,例如一
1.目的 大 型软件系统开发时,某些Java组件可能涉及到多种数据库或中间件系统的连接和应用,例如一
JVM 学习笔记目录: JVM探索之路之Class文件结构解析(二) :常量池 JVM探索之路之Class文件结构解
  每一个Class都对应着唯一的一个类或借口的定义信息。这里,我们称为"Class文件格式"只是通俗的
阅读Java Virtual Machine Specification中的第四章,理解Java的class文件格式。 class文件由8位的
阅读Java Virtual Machine Specification中的第四章,理解Java的class文件格式。 class文件由8位的
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号