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