欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java Class文件內(nèi)部結(jié)構(gòu)解析過(guò)程詳解

 更新時(shí)間:2013年11月28日 09:42:04   作者:  
java class的文件結(jié)構(gòu),java class文件結(jié)構(gòu)是基于字節(jié)流的,用unicode進(jìn)行編碼,下面說(shuō)說(shuō)java Class文件內(nèi)部結(jié)構(gòu)分析


大學(xué)的時(shí)候,就看過(guò)java虛擬機(jī)規(guī)范第二版,最近把最新的Java虛擬機(jī)規(guī)范第三版(java se 1.7版本)溫習(xí)了一遍,發(fā)現(xiàn)java虛擬機(jī)規(guī)范中java class的文件結(jié)構(gòu)部分并沒(méi)有太大的變化,順便也整理了一下。
java語(yǔ)言是跨平臺(tái)的,所謂一次編寫(xiě),到處運(yùn)行。之所以是跨平臺(tái)的,就是java定義了一套與操作系統(tǒng),硬件無(wú)關(guān)的字節(jié)碼格式,這個(gè)字節(jié)碼就是用java class文件來(lái)表示的,java class文件內(nèi)部定義了虛擬機(jī)可以識(shí)別的字節(jié)碼格式,這個(gè)格式是平臺(tái)無(wú)關(guān)性的,在linux系統(tǒng)或者在windows系統(tǒng)上都是一致的。這個(gè)就好比html文件,我們定義好規(guī)范,這個(gè)系統(tǒng)只要去按照規(guī)范顯示出來(lái)里面的內(nèi)容就好了。好比html就是class文件,瀏覽器就是虛擬機(jī)一樣,通過(guò)瀏覽器去執(zhí)行html的渲染過(guò)程,我們無(wú)論是用手機(jī),Windows系統(tǒng),蘋果系統(tǒng)上網(wǎng),顯示出來(lái)的內(nèi)容都是一樣。 java虛擬機(jī)可以從class文件中加載預(yù)定義的字節(jié)碼,也可以從網(wǎng)絡(luò),數(shù)據(jù)庫(kù),消息文件中加載字節(jié)碼。
下面來(lái)說(shuō)說(shuō)java class的文件結(jié)構(gòu),java class文件結(jié)構(gòu)是基于字節(jié)流的,用unicode進(jìn)行編碼。其實(shí)想想也可以完全用xml文件表示,只不過(guò)用xml表示的字節(jié)碼文本體積可能會(huì)很大,占用空間,同時(shí)解析起來(lái)比較耗時(shí),而且很容易被人為修改,導(dǎo)致未知錯(cuò)誤。下面是class文件的內(nèi)部結(jié)構(gòu)

復(fù)制代碼 代碼如下:

ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}



簡(jiǎn)要解釋一下:

U4 代表由無(wú)符號(hào)四個(gè)字節(jié)組成

u4 magic :是一個(gè)固定的數(shù)值,java虛擬機(jī)里面稱為魔數(shù) ,主要是用來(lái)標(biāo)識(shí)是否為java虛擬機(jī)所支持的文件結(jié)構(gòu),目前是0xCAFEBABE

u2 minor_version; u2 major_version; 代表次版本號(hào)和主版本號(hào)

u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; 這里面代表常量池個(gè)數(shù)以及常量池信息

u2 access_flags : 代表class訪問(wèn)標(biāo)記,例如:public protected

u2 this_class : 代表這個(gè)類的名稱 例如 java.lang.Object

u2 super_class : 代表父類名稱

u2 interfaces_count; u2 interfaces[interfaces_count]; 實(shí)現(xiàn)的接口格式以及接口類名

u2 fields_count; field_info fields[fields_count]; 字段個(gè)數(shù)以及字段信息

u2 methods_count; method_info methods[methods_count]; 方法個(gè)數(shù)以及方法信息

u2 attributes_count; attribute_info attributes[attributes_count]; java class文件內(nèi)部屬性信息,和java語(yǔ)言定義的屬性沒(méi)有關(guān)系,純粹就是給java虛擬機(jī)用的

以上都是java虛擬機(jī)規(guī)范中定義的class文件內(nèi)部結(jié)構(gòu)信息,可以參考 Java虛擬機(jī)規(guī)范 (Java SE 7版)這里就不細(xì)講

每種結(jié)構(gòu)又都定義了自己的結(jié)構(gòu)信息,例如:常量池結(jié)構(gòu),字段信息,方法信息,類信息,這幾種結(jié)構(gòu)之間又都互相引用,下面這幅圖簡(jiǎn)要介紹了java class文件的內(nèi)部結(jié)構(gòu)信息

其中常量池的里面的信息最為復(fù)雜,java虛擬機(jī)運(yùn)行時(shí)刻的所有信息都是從常量池來(lái)獲取的,常量池定義了一下幾種結(jié)構(gòu)

相關(guān)文章

  • Java集合Stream流操作的基本使用教程分享

    Java集合Stream流操作的基本使用教程分享

    流操作并不會(huì)影響原來(lái)的集合,可以簡(jiǎn)單認(rèn)為,流操作是把集合中的一個(gè)元素逐個(gè)復(fù)制放到一個(gè)首尾相接的流動(dòng)的水槽中。這篇文章整理了Stream流操作的基本使用,需要的可以參考一下
    2023-02-02
  • Spring Security實(shí)現(xiàn)身份認(rèn)證和授權(quán)的示例代碼

    Spring Security實(shí)現(xiàn)身份認(rèn)證和授權(quán)的示例代碼

    在 Spring Boot 應(yīng)用中使用 Spring Security 可以非常方便地實(shí)現(xiàn)用戶身份認(rèn)證和授權(quán),本文主要介紹了Spring Security實(shí)現(xiàn)身份認(rèn)證和授權(quán)的示例代碼,感興趣的可以了解一下
    2023-06-06
  • Java動(dòng)態(tài)代理機(jī)制的實(shí)例詳解

    Java動(dòng)態(tài)代理機(jī)制的實(shí)例詳解

    這篇文章主要介紹了 Java動(dòng)態(tài)代理機(jī)制的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能夠掌握動(dòng)態(tài)代理機(jī)制,需要的朋友可以參考下
    2017-09-09
  • 關(guān)于junit測(cè)試需要的依賴

    關(guān)于junit測(cè)試需要的依賴

    這篇文章主要介紹了關(guān)于junit測(cè)試需要的依賴,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 使用Jenkins自動(dòng)化構(gòu)建工具進(jìn)行敏捷開(kāi)發(fā)

    使用Jenkins自動(dòng)化構(gòu)建工具進(jìn)行敏捷開(kāi)發(fā)

    這篇文章主要為大家介紹了使用Jenkins自動(dòng)化構(gòu)建工具進(jìn)行敏捷開(kāi)發(fā),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • vscode快速引入第三方j(luò)ar包發(fā)QQ郵件

    vscode快速引入第三方j(luò)ar包發(fā)QQ郵件

    這篇文章主要介紹了vscode快速引入第三方j(luò)ar包發(fā)QQ郵件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java生產(chǎn)者消費(fèi)者模式實(shí)例分析

    Java生產(chǎn)者消費(fèi)者模式實(shí)例分析

    這篇文章主要介紹了Java生產(chǎn)者消費(fèi)者模式,結(jié)合實(shí)例形式分析了java生產(chǎn)者消費(fèi)者模式的相關(guān)組成、原理及實(shí)現(xiàn)方法,需要的朋友可以參考下
    2019-03-03
  • SpringMVC?@RequestMapping注解屬性詳細(xì)介紹

    SpringMVC?@RequestMapping注解屬性詳細(xì)介紹

    通過(guò)@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • java實(shí)現(xiàn)微信App支付服務(wù)端

    java實(shí)現(xiàn)微信App支付服務(wù)端

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微信App支付服務(wù)端,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • ibatis遷移到mybatis3的注意事項(xiàng)

    ibatis遷移到mybatis3的注意事項(xiàng)

    這篇文章主要介紹了ibatis遷移到mybatis3的注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下
    2017-10-10

最新評(píng)論