Class文件结构(更新中)
Class文件是一組以8位字節(jié)為單位的二進(jìn)制流,當(dāng)遇見需要占用8位字節(jié)以上空間的數(shù)據(jù)項時,則會按照高位在前的方式分割成若干個8位字節(jié)進(jìn)行存儲。
格式,采用偽結(jié)構(gòu),只有兩種數(shù)據(jù)結(jié)構(gòu):無符號數(shù)和表。
無符號數(shù):
表:由多個無符號數(shù)或其他表作為數(shù)據(jù)項構(gòu)成的復(fù)合數(shù)據(jù)類型,整個Class文件本質(zhì)上就是一張表
?
數(shù)據(jù)項:
魔數(shù)(magic)
Class文件的頭4個字節(jié),作用是確定此文件是否為虛擬機可接受的class文件
?
次版本號(Minor Version)
5、6字節(jié)
?
主版本(Major Version)
7、8字節(jié)
?
常量池容量計數(shù)值(constant_pool_count)
2個字節(jié)
?
常量池(constant_pool)
大小不固定
字面量
Java語言層面的常量:文本字符串、final
符號引用
編譯原理層面的概念
類和接口的全限定名(引入的類和接口,而不是此類或接口的)
字段的名稱和描述符(描述符即修飾符)
方法的名稱和描述符
java在進(jìn)行javac編譯時,沒有“連接”操作,而是在虛擬機加載class文件時動態(tài)連接,也就是說class文件不會包含各個方法、字段的最終內(nèi)存布局信息。
?
訪問標(biāo)志(access_flag)
2個字節(jié)
類或者接口層次的訪問信息,如這個class是類還是接口,是否是public
?
類索引(this_class)
u2
確定此類全限定名(通過索引能查出全限定名)
?
父索引(super_class)
u2
確定父類全限定名
?
接口計數(shù)器(interfaces_count)
u2
代表接口索引表的容量
?
接口索引集合(interfaces)
u2類型數(shù)據(jù)集合
此類實現(xiàn)了那些接口,按照implements后的接口順序從左到右排列
?
字段表集合(field_info)
接口或類中的變量的描述,包括類級變量和實例級變量。
內(nèi)容:
作用域(public、private、protected)、實例變量還是類變量、可變性、并發(fā)可見性、字段數(shù)據(jù)類型、字段名稱
對于修飾符,屬于布爾值,用標(biāo)志位表示
對于字段名稱,其實是通過索引引用常量池中的常量的簡單名稱
?
方法表集合
?
屬性表集合
?
轉(zhuǎn)載于:https://www.cnblogs.com/yanze/p/9811478.html
總結(jié)
以上是生活随笔為你收集整理的Class文件结构(更新中)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue CLI 3 脚手架搭建
- 下一篇: 并行排序