這期內容當中小編將會給大家帶來有關深入淺析Java中的class文件格式,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
class文件中的fields_count和fields
fields_count描述的是當前的類中定義的字段的個數, 注意, 這里包括靜態字段, 但不包括從父類繼承的字段。 如果當前class文件是由一個接口生成的, 那么這里的fields_count描述的是接口中定義的字段, 我們知道, 接口中定義的字段默認都是靜態的。此外要說明的是, 編譯器可能會自動生成字段, 也就是說, class文件中的字段的數量可能多于源文件中定義的字段的數量。 舉例來說, 編譯器會為內部類增加一個字段, 這個字段是指向外圍類的對象的引用。
位于fields_count下面的數據叫做fields, 可以把它看做一個數組, 數組中的每一項是一個field_info 。這個數組中一共有fields_count個field_info , 每個field_info都是對一個字段的描述。 下面我們詳細講解field_info的結構。 每個field_info的結構如下:
(1)access_flags
其中access_flags占兩個字節, 描述的是字段的訪問標志信息。 這里就不在詳細介紹了, 下面給出一張表格(該表格來自《深入Java虛擬機》):
(2)name_index
access_flags下面的兩個字節是name_index, 這是一個指向常量池的索引, 它描述的是當前字段的字段名。 這個索引指向常量池中的一個CONSTANT_Utf8_info數據項。 這個CONSTANT_Utf8_info數據項中存放的字符串就是當前字段的字段名。
(3)descriptor_index
name_index下面的兩個字節叫做descriptor_index , 它同樣是一個指向常量池的索引, 它描述的是當前字段的描述符。 這個索引指向常量池中的一個CONSTANT_Utf8_info數據項。 這個CONSTANT_Utf8_info數據項中存放的字符串就是當前字段的描述符。
(4)attributes_count和attributes
descriptor_index 下面是attributes_count和attributes 。 這是對當前字段所具有的屬性的描述。 這里的屬性和源文件中的屬性不是同一個概念, 在源文件測層面中, 屬性是字段的另一種叫法, 希望讀者不要疑惑。讀者也不要輕視class文件中的屬性, 這些屬性可以描述很多的信息。 我們會在后面的文章中進行介紹。
attributes_count表示這個字段有幾個屬性。attributes 可以看成一個數組, 數組中的每一項都是一個attribute_info , 每個attribute_info 表示一個屬性, 數組中一共有attributes_count個屬性。可以出現在filed_info中的屬性有三種, 分別是ConstantValue, Deprecated, 和 Synthetic。 這些屬性會在后面的文章中進行介紹。
下面我們以代碼的形式進行解釋, 源碼如下:
package com.bjpowernode.test; public class Programer extends Person{ private Computer computer; public Programer(Computer computer){ this.computer = computer; } public void doWork(){ computer.calculate(); } }
新聞標題:深入淺析Java中的class文件格式-創新互聯
標題網址:http://vcdvsql.cn/article36/ddjpsg.html
成都網站建設公司_創新互聯,為您提供外貿建站、網頁設計公司、網站排名、服務器托管、手機網站建設、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯