首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Class类文件结构

01 — Class类文件结构 在深入理解Java虚拟机一书中是先介绍概念然后具体分析,这里我就反过来描述,我们先看一下class文件,这里我打开一个本地被编译过的class文件,我们看到它是乱码的。...这里我们就需要引入一些概念了: Class文件格式采用类似C语言结构体的伪结构来存储数据,这种结构只有两种数据类型:无符号数和表。...常量池中14种常量项的结构总表(共有14种(JDK1.7前只有11种)结构各不相同的表结构数据。...Class文件是一组以8字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑排列在class文件中,中间没有任何分隔符,这使得class文件中存储的内容几乎全部是程序运行的必要程序。...Java虚拟机规范规定,Class文件格式采用类似C语言结构体的伪结构来存储数据,这种结构只有两种数据类型:无符号数和表

89120
您找到你想要的搜索结果了吗?
是的
没有找到

Class文件结构介绍

访问标志   在常量池结束后,紧接着的两个字节代表访问标志(access_flags),这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口,是否定义为public类型,是否定义为...类索引,父类索引与接口索引集合   类索引(this_class)和父类索引(super_class)都是一个u2类型的数据,接口索引计数器也是一个u2类型的数据,接口索引集合则是一组u2类型的数据集合...,Class文件中的这几项数据来确定这个类的继承关系 类索引   确定当前类的全限定名 ?...由于java单继承的原则,所以父类只可能有一个;由于Object是所有其他类的基类,所以除了Object类本身的super_class为0意外,其余的所有类的super_class都不为0. ?...小结:   类索引的直接值,父类索引的直接值,接口索引集合中的索引的直接值,代表的是一个常量池中的索引值,该索引值对应为一个CONSTANT_Class_info , CONSTANT_Class_info

92230

Class文件结构介绍

概述   常量池是紧接着主次版本号之后出现的,常量池可以理解为class文件之中的资源仓库,它是Class文件结构中与其他项目管理最多的数据类型,也是占用Class文件空间最大的数据项目之一,同时它还是在...Class文件中第一个出现的表类型数据项目。...常量池中存储着最基本的信息,不仅程序会用到,而且Class文件本身也会通过#来引用 ?...直接引用   直接引用可以指向目标的指针、相对偏移量或者是一个能够直接定位到目标的句柄。直接引用于虚拟机的内存布局相关,同一个符号引用在不同的虚拟机实例上翻译出来的直接引用一般不同。...从上面的结构我们也发现不同类型的表数据结构也是不相同的,详细结构如下,参考后会更加详细些。

1.4K30

Class 类文件结构

Class 类文件的结构 ---- Class 文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 Class文件之中,中间没有任何分隔符,这使得整个 Class文件中存储的内容几乎全部是程序运行的必要数据...Java虚拟机规范中规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型:无符号数和表,后面的解析都要以这两种数据类型为基础,所以这里先介绍这两个概念。...表用于描述有层次关系的复合结构的数据,整个 Class文件本质上就是一张表。...Class文件字节码结构组织示意图: ?...常量池 ---- 紧接着主次版本号之后的是常量池入口,常量池可以理解为 Class文件之中的资源仓库,它是 Class文件结构中与其他项目关联最多的数据类型,也是占用 Class文件空间最大的数据项目之一

84320

Class文件结构介绍

对于每个java程序员来说class文件应该是每天都会接触的,一个class文件都对应着唯一的一个类或接口的定义信息,但是对应class文件的具体存储结构并不一定很清楚,所以本文就梳理下class文件的结构...Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种结构体只有两种数据类型:无符号数和表 无符号数   无符号数属于基本的数据类型,以u1,u2,u4,u8来分别表示1个字节,2个字节,...4个字节和8个字节的无符号数,无符号数可以用来描述数字,索引引用,数量值或者按照UTF-8编码结构构成字符串值。...表   表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表都习惯性地一"_info"结尾,表用于描述有层次关系的复合结构的数据,整个class文件本质上就是一张表,class的完整结构如下...为了便于查看class结构我们通过一个java文件编译出对应的class文件然后通过WinHex工具或者classpy来查看。

73510

《Java核心技术》 Class类文件结构开篇Class类文件结构

想看懂这一串十六进制的字符,就要了解class文件协议。...Class类文件结构 class文件的结构 简单讲,jvm的class文件是针对jvm的私家定制。只要运行在jvm上byte code,都需要按照class文件format来。否则jvm解析不了。...官网文档: The Java Virtual Machine class file format class文件时java虚拟机执行引擎的数据入口,也是java技术体系的基础支柱之一,了解class文件的结构对后面进一步了解虚拟机执行引擎有很重要的意义...class文件是一组以八位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在class文件中,中间没有添加任何分隔符,这使得整个class文件中存储的内容几乎全部都是程序运行的必要数据,没有空隙存在...ClassFile数据结构 ClassFile { u4 magic;//魔数(0xCAFEBABE) u2 minor_version;//次版本号 u2 major_version

57330

JVM之Class文件结构

每一个class文件对应一个类或者接口,但是一个类或者接口不一定生成class文件,classloader直接生成。...类似C语言结构体的微结构来存储数据,只包含无符号数和表两种结构。...class本质上就是一张表 ? 魔数和Class文件版本: class文件的头四个字节成为魔数(oxCAFEBABY),确定是否可以被虚拟机接受,多数文件存储标准都采用这个形式。...常量池(大小不定):class文件的资源仓库,占用空间比较大,和其它数据项交互多,第一个出现表类型数据的数据项。...类索引、父类索引与接口索引集合: 类索引(this_class):u2数据类型,确定类的全限定名, 父类索引(super_class):u2数据类型,确定父类全限定名,只有一个(单继承),除了

42230

Class类文件的结构

Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在...魔数(Magic Number):Class文件的头4个字节,唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件。...高版本的JDK能向下兼容以前版本的Class文件,但不能运行以后版本的Class文件。   ...常量池(Constant Pool):是Class文件之中的资源仓库,是Class文件结构中与其他项目关联最多的数据类型,也是占用Class文件空间最大的数据项目之一,同时它还是在Class文件中第一个出现的表类型数据项目...方法表集合:与字段的描述几乎完全一致,结构如同字段表一样,依次包括访问标志(access_flags)、名称索引(name_index)、描述符索引(descriptor_index)、属性表集合(attributes

85000

JVM之Class结构速记

JVM之Class结构详解 Class文件规范 Class文件大结构总览 magic Class文件版本号 Constant_Pool常量池 各个表对应的含义 反编译代码示例 常量池中常量表对应数据结构内容...存储额外信息 属性表 Class文件规范 根据《JAVA虚拟机规范》的规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中(Class文件格式中)只有两种数据类型:“无符号数...u1在Class文件中为两个数字或字母,比如00,01,0A,6F ; u2在Class文件中为四个数字或字母,比如0001,000A,6C61; 表是用来描述复合结构的数据,它由无符号数或者其他表构成...本篇文章会讲解除了属性表之外的其他表结构,属性表单独写一篇文章进行讲解 本质上Class结构也是将表和无符号数组合起来的一张表。...Class文件大结构总览 后面讲的所有结构都是按照这个Class文件表讲的,所以这张图先看下。

42510

Java中class文件结构

class文件是一组以8位字节为基础单位的二进制流组成的。...class文件的魔数是0xCAFEBABE,Java虚拟机判断一个文件是否是class文件就是依靠此魔数进行的。...版本号 接下来的4个字节是class文件版本号,其中前两个字节表示的是次版本号,后两个字节表示的是主版本号。...java虚拟机可以运行低于当前版本的class文件,但不能运行高于其版本的class文件。...字段用于描述接口或者类中声明的变量,包括类变量和实例变量,但不包括局部变量 字段的开始两个字节表示字段数量,接下来就是字段的相关描述信息: 访问标志 名称 描述符 属性表的数量 属性表 方法 同字段 属性 对于每个属性的结构

63330

结构体和指针

结构体和指针 Golang是一种静态类型、编译型的语言,它提供了结构体和指针这两个重要的概念。本文将详细介绍这两个概念及其在Golang中的应用。...指针作为函数参数 指针在Golang中经常用作函数参数,这是因为它们可以允许函数修改其调用者传递的变量的值。这非常有用,特别是在处理大型数据结构时。...指针结构结构体也可以通过指针来访问和修改其字段的值。这是因为结构体实际上是一个连续的内存块,而指针可以指向该内存块的起始地址。...最后,我们再次打印person结构体,以验证是否已成功更改其名称。 指针和数组 在Golang中,数组名本身就是指向数组起始位置的指针。因此,指针可以用于访问并操作数组的元素。...指针可以与结构体、数组等数据类型一起使用,以实现更高效、可维护和可重用的代码。

13210

9.3 结构指针

01 指向结构体变量的指针 1、指向结构体对象的指针变量既可以指向结构体变量,也可指向结构体数组中的元素。 2、指针变量的基类型必须与结构体变量的类型相同。...02 指向结构体数组的指针 1、(++p)->num,先使p自加1,然后得到p指向的元素中的num成员值。 2、(p++)->num,先求的p->num的值,然后再使p自加1。...03 用结构体变量和结构体变量的指针作函数参数 1、用结构体变量的成员作参数。用法和用普通变量作实参是一样的,属于“值传递”方式。应当注意实参与形参的类型保持一致。 2、用结构体变量作实参。...用结构体变量作实参时,采取的也是“值传递”的方式,将结构体变量所占的内存单元的内容全部按顺序传递给形参,形参也必须是同类型的结构体变量。...3、用指向结构体变量(或数组元素)的指针作实参,将结构体变量的地址传给形参。 有时候,正是那些意想不到之人,成就了无人能成之事。 ——图灵 ? 文字/闫小林 图片/源于网络 - END -

7363229

C语言结构指针_C语言函数返回结构指针

,下面来说结构指针 结构指针 一个结构体变量的指针就是该结构体变量所占据内存段的起始地址。...可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。 同时指针变量也可以用来指向结构体数组中的元素。...结构指针变量说明的一般形式为: struct 结构名 *结构指针变量名 例如,在前面的例题中定义了stu这个结构,如果要说明一个指向stu的指针变量pstu,可写为 struct stu *pstu...与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值才能使用 赋值就是把结构变量首地址赋予该指针变量,不能把结构名赋予该指针变量。...有了结构指针变量,就更方便地访问结构变量的各个成员。

3.5K30

Class文件结构全面解析(下)

类索引和父类索引 类索引(this_class)和父类索引(super_class)都是一个u2类型的数据,类索引用于确定这个类的全限定名,父类索引用于确定这个类的父类全限定名。...再来看一下之前的Class文件例子: 结合之前javap分析出来的常量池内容: #3 = Class #17 // OneMoreStudy #4 = Class...具体结构如下表: 类型 名称 数量 描述 u2 access_flags 1 字段的访问标志 u2 name_index 1 字段的简单名称索引 u2 descriptor_index 1 字段的描述符索引...方法表集合 方法表的结构和字段表的是一样的,也是依次包括了访问标志(access_flags)、名称索引(name_index)、描述符索引(descriptor_index)和属性表集合(attributes...随着JDK版本的不断升级,Class文件结构也在不断更新,学习之路,永不止步。

23120

Class文件结构(2)——用java代码实现解析Class文件

本文,我们编写JAVA程序来解析class文件,读者注意,阅读本文前先详细了解Class文件结构,可参考笔者前一篇文章:Class文件结构(1)—手动解析每一个字节,你看不懂 代码地址:https...先定义对应class文件结构中各项的类型,如常量池、字段表、方法表、属性表、U2、U4,再定义各项的解析器,并使用责任链模式完成class文件结构各项的解析工作。...ClassFile analysis(ByteBuffer codeBuf) throws Exception { codeBuf.position(0); // 重置ByteBuffer的读指针...CONSTANT_MethodType_info除tag字段外,只有一个u2类型的描述符指针字段descriptor_index,指向常量池中的某一CONSTANT_Utf8_info结构的常量。...懂的都懂,一定要结合我前面的文章看,通过编写一个简单的Class文件结构解析工具项目,不仅对Class文件结构有了深刻的了解,还能自己实现Class文件结构的解析。

2.8K10

Class文件结构全面解析(上)

它就以二进制字节流的方式被存放在Class文件中,其中包含了Java虚拟机指令集和符号表以及其他辅助信息。 为什么需要了解Class文件结构?...一般对于数据结构的分享难免比较枯燥,但是了解Class文件结构是了解Java虚拟机的重要基础之一。如果想比较深入地了解Java虚拟机,那么Class文件结构是不能不接触的。...Class文件结构简介 Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序准确地排列在Class文件中,中间没有任何分隔符。...Class文件格式采用一种类似于C语言结构体的伪结构来储存数据的,这种伪结构有两种数据类型:无符号数和表。...常量池 紧跟着主版本号的就是常量池,它可以理解为Class文件的资源仓库,也是Class文件结构中与其他数据项关联最多的数据类型。

27530
领券