最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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


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

復制代碼 代碼如下:

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];
}



簡要解釋一下:

U4 代表由無符號四個字節(jié)組成

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

u2 minor_version; u2 major_version; 代表次版本號和主版本號

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

u2 access_flags : 代表class訪問標記,例如:public protected

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

u2 super_class : 代表父類名稱

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

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

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

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

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

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

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

相關文章

  • java中的Object類的toSpring()方法

    java中的Object類的toSpring()方法

    這篇文章主要介紹了java中的Object類的toSpring()方法,Object是類層次結(jié)構(gòu)的根,每個類都可以將Object作為超類。所有類都直接或者間接的繼承自該類,下文相關資料,需要的朋友可以參考下
    2022-04-04
  • Java開發(fā)學習 Eclipse項目有紅感嘆號解決之道

    Java開發(fā)學習 Eclipse項目有紅感嘆號解決之道

    這篇文章主要為大家詳細介紹了完美解決Eclipse項目有紅感嘆號問題的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java中ArrayList的工作原理詳解

    Java中ArrayList的工作原理詳解

    本文主要介紹了Java中ArrayList的工作原理,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • ThreadPoolExecutor參數(shù)含義及源碼執(zhí)行流程詳解

    ThreadPoolExecutor參數(shù)含義及源碼執(zhí)行流程詳解

    這篇文章主要為大家介紹了ThreadPoolExecutor參數(shù)含義及源碼執(zhí)行流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Java原生方法實現(xiàn) AES 算法示例

    Java原生方法實現(xiàn) AES 算法示例

    這篇文章主要介紹了Java原生方法實現(xiàn) AES 算法,結(jié)合實例形式分析了Java實現(xiàn)AES加密算法的相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • ReentrantLock從源碼解析Java多線程同步學習

    ReentrantLock從源碼解析Java多線程同步學習

    這篇文章主要為大家介紹了ReentrantLock從源碼解析Java多線程同步學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • SpringMVC xml文件路徑在web.xml中的配置方式

    SpringMVC xml文件路徑在web.xml中的配置方式

    這篇文章主要介紹了SpringMVC xml文件路徑在web.xml中的配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java使用DOM4J對XML文件進行增刪改查操作

    java使用DOM4J對XML文件進行增刪改查操作

    這篇文章主要為大家詳細介紹了java使用DOM4J對XML文件進行增刪改查操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java中時間戳的獲取和轉(zhuǎn)換的示例分析

    Java中時間戳的獲取和轉(zhuǎn)換的示例分析

    這篇文章主要介紹了Java中時間戳的獲取和轉(zhuǎn)換的示例分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • SpringBoot使用WebSocket的方法實例詳解

    SpringBoot使用WebSocket的方法實例詳解

    WebSocket 是 HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協(xié)議。這篇文章主要介紹了SpringBoot使用WebSocket,需要的朋友可以參考下
    2019-06-06

最新評論

永昌县| 平果县| 西安市| 东乡族自治县| 西畴县| 沂源县| 屏东县| 定安县| 仲巴县| 樟树市| 天柱县| 台南县| 长子县| 永和县| 哈尔滨市| 柳州市| 曲松县| 科技| 鹤岗市| 平顶山市| 绍兴市| 莱州市| 广丰县| 马尔康县| 大悟县| 颍上县| 抚顺市| 读书| 射洪县| 玉环县| 绍兴县| 霍城县| 陆良县| 田东县| 海兴县| 道孚县| 惠东县| 忻州市| 韶关市| 丰镇市| 綦江县|