深入淺析Java中的class文件格式-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)深入淺析Java中的class文件格式,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的平江網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

class文件中的fields_count和fields

fields_count描述的是當(dāng)前的類中定義的字段的個(gè)數(shù), 注意, 這里包括靜態(tài)字段, 但不包括從父類繼承的字段。 如果當(dāng)前class文件是由一個(gè)接口生成的, 那么這里的fields_count描述的是接口中定義的字段, 我們知道, 接口中定義的字段默認(rèn)都是靜態(tài)的。此外要說(shuō)明的是, 編譯器可能會(huì)自動(dòng)生成字段, 也就是說(shuō), class文件中的字段的數(shù)量可能多于源文件中定義的字段的數(shù)量。 舉例來(lái)說(shuō), 編譯器會(huì)為內(nèi)部類增加一個(gè)字段, 這個(gè)字段是指向外圍類的對(duì)象的引用。 

位于fields_count下面的數(shù)據(jù)叫做fields, 可以把它看做一個(gè)數(shù)組, 數(shù)組中的每一項(xiàng)是一個(gè)field_info 。這個(gè)數(shù)組中一共有fields_count個(gè)field_info , 每個(gè)field_info都是對(duì)一個(gè)字段的描述。 下面我們?cè)敿?xì)講解field_info的結(jié)構(gòu)。 每個(gè)field_info的結(jié)構(gòu)如下:

深入淺析Java中的class文件格式

(1)access_flags

其中access_flags占兩個(gè)字節(jié), 描述的是字段的訪問(wèn)標(biāo)志信息。 這里就不在詳細(xì)介紹了, 下面給出一張表格(該表格來(lái)自《深入Java虛擬機(jī)》):

深入淺析Java中的class文件格式

(2)name_index

access_flags下面的兩個(gè)字節(jié)是name_index, 這是一個(gè)指向常量池的索引, 它描述的是當(dāng)前字段的字段名。 這個(gè)索引指向常量池中的一個(gè)CONSTANT_Utf8_info數(shù)據(jù)項(xiàng)。 這個(gè)CONSTANT_Utf8_info數(shù)據(jù)項(xiàng)中存放的字符串就是當(dāng)前字段的字段名。

(3)descriptor_index

name_index下面的兩個(gè)字節(jié)叫做descriptor_index , 它同樣是一個(gè)指向常量池的索引, 它描述的是當(dāng)前字段的描述符。 這個(gè)索引指向常量池中的一個(gè)CONSTANT_Utf8_info數(shù)據(jù)項(xiàng)。 這個(gè)CONSTANT_Utf8_info數(shù)據(jù)項(xiàng)中存放的字符串就是當(dāng)前字段的描述符。 

(4)attributes_count和attributes

descriptor_index 下面是attributes_count和attributes 。 這是對(duì)當(dāng)前字段所具有的屬性的描述。 這里的屬性和源文件中的屬性不是同一個(gè)概念, 在源文件測(cè)層面中, 屬性是字段的另一種叫法, 希望讀者不要疑惑。讀者也不要輕視class文件中的屬性, 這些屬性可以描述很多的信息。 我們會(huì)在后面的文章中進(jìn)行介紹。

attributes_count表示這個(gè)字段有幾個(gè)屬性。attributes 可以看成一個(gè)數(shù)組, 數(shù)組中的每一項(xiàng)都是一個(gè)attribute_info , 每個(gè)attribute_info 表示一個(gè)屬性, 數(shù)組中一共有attributes_count個(gè)屬性??梢猿霈F(xiàn)在filed_info中的屬性有三種, 分別是ConstantValue, Deprecated, 和 Synthetic。 這些屬性會(huì)在后面的文章中進(jìn)行介紹。

下面我們以代碼的形式進(jìn)行解釋, 源碼如下:

package com.bjpowernode.test; 


public class Programer extends Person{ 


 
 private Computer computer; 
 
 public Programer(Computer computer){ 
  this.computer = computer; 
 } 
 
public void doWork(){ 
  computer.calculate(); 
 } 
}

新聞標(biāo)題:深入淺析Java中的class文件格式-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://muchs.cn/article36/ddjpsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站排名、服務(wù)器托管、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)