新聞中心
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)深入淺析Java中class文件格式的屬性,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
class文件中的attributes_count和attributes
attributes_count位于class文件中methods的下面。 它占兩個字節(jié), 存儲的是一個整數(shù)值, 表示class文件中屬性的個數(shù)。
attributes_count下面的是attributes, 可以把它看做一個數(shù)組, 每個數(shù)組項是一個attribute_info , 每個attribute_info 表示一個屬性。attributes中有 attributes_count個attribute_info 。
需要說明的是, 屬性會出現(xiàn)在多個地方, 不僅僅出現(xiàn)在頂層的ClassFile中, 也會出現(xiàn)在class文件中的數(shù)據(jù)項中, 如出現(xiàn)在field_info中, 用來描述特定字段的一些信息, 還可以出現(xiàn)在method_info中, 用來描述特定方法的一些信息。
屬性(attribute_info)的大概格式是這樣的:
其中attribute_name_index占兩個字節(jié), 它是一個指向常量池數(shù)據(jù)項的索引。 它指向一個CONSTANT_Utf8_info , 這個CONSTANT_Utf8_info 中存放的是當(dāng)前屬性的名字。
attribute_name_index下面的四個字節(jié)叫做attribute_length, 它表示當(dāng)前屬性的長度, 這個長度不包括前6個字節(jié), 也就是說只包括屬性真實信息(也就是info)的長度。
attribute_length下面的數(shù)據(jù)是info, 它的長度由上面提到的attribute_length指定, 它存放的是真實的屬性數(shù)據(jù)。
下面我們會依次介紹一些重要屬性, 相對不是很重要的屬性會一筆帶過。
ClassFile中的SourceFile屬性
首先介紹一個比較簡單的屬性:SourceFile。 該屬性出現(xiàn)在頂層的class文件中。 它描述了該類是從哪個源文件中編譯來的, 注意, 描述的是源文件, 而不是類, 一個源文件中可以存在多個類。 它的格式如下:
前面說過, attribute_name_index指向常量池中的一個CONSTANT_Utf8_info , 這個CONSTANT_Utf8_info 中存放的是這個屬性的名字字符串, 即“SourceFile” 。
attribute_length是屬性信息的長度, 這里是2, 因為這個屬性的info就兩個字節(jié)。
sourcefile_index占兩個字節(jié), 這也是為什么attribute_length是2的原因。 sourcefile_index指向常量池中的一個CONSTANT_Utf8_info , 這個CONSTANT_Utf8_info 中存放的是生成該類的源文件的文件名, 這里的文件名不包括路徑部分。
下面舉例說明, 示例代碼:
package combjpowernodetest; public class Person { int age; int getAge(){ return age; } }
網(wǎng)站題目:深入淺析Java中class文件格式的屬性-創(chuàng)新互聯(lián)
文章位置:http://www.ef60e0e.cn/article/dghgph.html