十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这期内容当中小编将会给大家带来有关深入浅析Java中class文件格式的属性,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
创新互联建站是一家以网络技术公司,为中小企业提供网站维护、成都网站设计、网站建设、外贸网站建设、网站备案、服务器租用、域名申请、软件开发、微信小程序定制开发等企业互联网相关业务,是一家有着丰富的互联网运营推广经验的科技公司,有着多年的网站建站经验,致力于帮助中小企业在互联网让打出自已的品牌和口碑,让企业在互联网上打开一个面向全国乃至全球的业务窗口:建站欢迎咨询:18982081108class文件中的attributes_count和attributes
attributes_count位于class文件中methods的下面。 它占两个字节, 存储的是一个整数值, 表示class文件中属性的个数。
attributes_count下面的是attributes, 可以把它看做一个数组, 每个数组项是一个attribute_info , 每个attribute_info 表示一个属性。attributes中有 attributes_count个attribute_info 。
需要说明的是, 属性会出现在多个地方, 不仅仅出现在顶层的ClassFile中, 也会出现在class文件中的数据项中, 如出现在field_info中, 用来描述特定字段的一些信息, 还可以出现在method_info中, 用来描述特定方法的一些信息。
属性(attribute_info)的大概格式是这样的:
其中attribute_name_index占两个字节, 它是一个指向常量池数据项的索引。 它指向一个CONSTANT_Utf8_info , 这个CONSTANT_Utf8_info 中存放的是当前属性的名字。
attribute_name_index下面的四个字节叫做attribute_length, 它表示当前属性的长度, 这个长度不包括前6个字节, 也就是说只包括属性真实信息(也就是info)的长度。
attribute_length下面的数据是info, 它的长度由上面提到的attribute_length指定, 它存放的是真实的属性数据。
下面我们会依次介绍一些重要属性, 相对不是很重要的属性会一笔带过。
ClassFile中的SourceFile属性
首先介绍一个比较简单的属性:SourceFile。 该属性出现在顶层的class文件中。 它描述了该类是从哪个源文件中编译来的, 注意, 描述的是源文件, 而不是类, 一个源文件中可以存在多个类。 它的格式如下:
前面说过, attribute_name_index指向常量池中的一个CONSTANT_Utf8_info , 这个CONSTANT_Utf8_info 中存放的是这个属性的名字字符串, 即“SourceFile” 。
attribute_length是属性信息的长度, 这里是2, 因为这个属性的info就两个字节。
sourcefile_index占两个字节, 这也是为什么attribute_length是2的原因。 sourcefile_index指向常量池中的一个CONSTANT_Utf8_info , 这个CONSTANT_Utf8_info 中存放的是生成该类的源文件的文件名, 这里的文件名不包括路径部分。
下面举例说明, 示例代码:
package combjpowernodetest; public class Person { int age; int getAge(){ return age; } }