最近在寫一個私人項目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能讓我們對Java Class文件的設(shè)計與結(jié)構(gòu)能夠有一個深入的理解。主體框架與基本功能已經(jīng)完成,還有一些細(xì)節(jié)功能日后再增加。實際上JDK已經(jīng)提供了命令行工具javap來反編譯Class文件,但本篇文章將闡明我實現(xiàn)解析器的思路。
創(chuàng)新互聯(lián)公司專注骨干網(wǎng)絡(luò)服務(wù)器租用10多年,服務(wù)更有保障!服務(wù)器租用,重慶服務(wù)器托管 成都服務(wù)器租用,成都服務(wù)器托管,骨干網(wǎng)絡(luò)帶寬,享受低延遲,高速訪問。靈活、實現(xiàn)低成本的共享或公網(wǎng)數(shù)據(jù)中心高速帶寬的專屬高性能服務(wù)器。Class文件
作為類或者接口信息的載體,每個Class文件都完整的定義了一個類。為了使Java程序可以“編寫一次,處處運行”,Java虛擬機規(guī)范對Class文件進(jìn)行了嚴(yán)格的規(guī)定。構(gòu)成Class文件的基本數(shù)據(jù)單位是字節(jié),這些字節(jié)之間不存在任何分隔符,這使得整個Class文件中存儲的內(nèi)容幾乎全部是程序運行的必要數(shù)據(jù),單個字節(jié)無法表示的數(shù)據(jù)由多個連續(xù)的字節(jié)來表示。
根據(jù)Java虛擬機規(guī)范,Class文件采用一種類似于C語言結(jié)構(gòu)體的偽結(jié)構(gòu)來存儲數(shù)據(jù),這種偽結(jié)構(gòu)中只有兩種數(shù)據(jù)類型:無符號數(shù)和表。Java虛擬機規(guī)范定義了u1、u2、u4和u8來分別表示1個字節(jié)、2個字節(jié)、4個字節(jié)和8個字節(jié)的無符號數(shù),無符號數(shù)可以用來描述數(shù)字、索引引用、數(shù)量值或者是字符串。表是由多個無符號數(shù)或者其它表作為數(shù)據(jù)項構(gòu)成的復(fù)合數(shù)據(jù)類型,表用于描述有層次關(guān)系的復(fù)合結(jié)構(gòu)的數(shù)據(jù),因此整個Class文件本質(zhì)上就是一張表。在ClassAnalyzer中,byte、short、int和long分別對應(yīng)u1、u2、u4和u8數(shù)據(jù)類型,Class文件被描述為如下Java類。
public class ClassFile { public U4 magic; // magic public U2 minorVersion; // minor_version public U2 majorVersion; // major_version public U2 constantPoolCount; // constant_pool_count public ConstantPoolInfo[] cpInfo; // cp_info public U2 accessFlags; // access_flags public U2 thisClass; // this_class public U2 superClass; // super_class public U2 interfacesCount; // interfaces_count public U2[] interfaces; // interfaces public U2 fieldsCount; // fields_count public FieldInfo[] fields; // fields public U2 methodsCount; // methods_count public MethodInfo[] methods; // methods public U2 attributesCount; // attributes_count public BasicAttributeInfo[] attributes; // attributes }
當(dāng)前文章:JavaClass解析器實現(xiàn)方法示例-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://aaarwkj.com/article14/dpiode.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、App設(shè)計、品牌網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)站導(dǎo)航、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容