一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java Class文件內部結構解析過程詳解

java Class文件內部結構解析過程詳解

2019-10-22 11:39java教程網 Java教程

java class的文件結構,java class文件結構是基于字節流的,用unicode進行編碼,下面說說java Class文件內部結構分析

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

 

復制代碼代碼如下:

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



java Class文件內部結構解析過程詳解

 


簡要解釋一下:

U4 代表由無符號四個字節組成

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

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

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

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

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

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]; java class文件內部屬性信息,和java語言定義的屬性沒有關系,純粹就是給java虛擬機用的

以上都是java虛擬機規范中定義的class文件內部結構信息,可以參考 Java虛擬機規范 (Java SE 7版)這里就不細講

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

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

java Class文件內部結構解析過程詳解

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 32pao强力打造免费高速高 | 9久热这里只有精品视频在线观看 | 果冻传媒在线播放观看228集 | 国产精品嫩草影院一二三区 | 天堂8在线天堂bt | 息与子中文字幕在线 | 亚久久伊人精品青青草原2020 | 法国贵妇一级伦理hd | 国产免费一区二区三区免费视频 | 免费理伦片在线观看全网站 | 亚洲美色综合天天久久综合精品 | 日本不卡在线观看免费v | 欧美ⅹxxxhd3d | 香蕉视频在线观看网站 | 欧美日韩在线观看区一二 | 国产精品久久久久网站 | yy8090韩国日本三理论免费 | 甜蜜惩罚小说 | fuqer日本老师| 男人与禽交的方法 | 国产欧美成人免费观看 | 亚洲国产欧美在线人成aaaa20 | 男人捅女人的鸡鸡 | 无颜之月全集免费观看 | 任我淫| 华人在线京东热 | 99精品国产在现线免费 | 精品图区| 免费观看伦理片 | 久久91精品国产91久 | 亚洲国产欧美在线成人aaaa | 91制片厂制作传媒网站 | 好紧好爽范冰冰系列 | 2019年国产不卡在线刷新 | 国产亚洲精aa在线观看香蕉 | 被夫上司强迫中文 | 骚虎最新网址 | 国产一区二区三区水野朝阳 | 无码精品一区二区三区免费视频 | 丝袜爆操 | 动漫美女人物被黄漫小说 |