Class 文件是一組以8位字節(jié)為基礎(chǔ)單位的二進(jìn)制流。
類似下圖,0-3是一組。4-7是一組。

Class 文件是類似與c語言結(jié)構(gòu)的偽結(jié)構(gòu)來存儲數(shù)據(jù)的。由兩種數(shù)據(jù)類型組成:
【1】 無符號數(shù)。 基本數(shù)據(jù)類型。以u1,u2,u4,u8。來代表1個字節(jié)、2個字節(jié)、4個字節(jié)、8個字節(jié)的無符號數(shù)。無符號數(shù)可以用來表示,數(shù)字,索引引用,數(shù)量值,字符串值。
【2】表。以多個無符號數(shù)或者表組成的復(fù)合型數(shù)據(jù)結(jié)構(gòu)。已_info結(jié)尾。class 文件本質(zhì)就是一張表。

1? 魔數(shù) 與class 版本。
魔數(shù)就是文件開頭的4個字節(jié),如上面的 cafebabe,來確定文件格式。
https://www.cnblogs.com/mq0036/p/3912355.html
摘要幾個。
JPEG (jpg),文件頭:FFD8FF?
PNG (png),文件頭:89504E47?
GIF (gif),文件頭:47494638?
TIFF (tif),文件頭:49492A00?
Windows Bitmap (bmp),文件頭
接著的? 00 00 00 34 ,分別代表,次版本號(00 00)和主板本號(00 34)。

2 常量池
版本過后緊接著 就是常量池。先由一個u2 類型的數(shù)據(jù),保存該類的常量池大小。 如上8-9(00 1d),換成 10進(jìn)制是 29。 也就是 有28個常量, 索引 范圍是 1-28。

常量池 放的是? 字面量和 符號引用。
字面量 : 字符串,修飾為final的常量。
符號引用:類和接口的全限定名。? 字段名稱和描述符。 方法名稱和描述符。
常量池中為什么要包含這些內(nèi)容?
class文件不會保各個方法 字段的最終內(nèi)存布局信息,因為這些方法,字段,不經(jīng)過運行期轉(zhuǎn)換無法得到真正的內(nèi)存信息。
虛擬機在運行時,會從常量池獲得對應(yīng)的符號引用,再在類創(chuàng)建時或運行時解析,翻譯到具體的內(nèi)存入口。
常量池的一共有 14 種常量。如下:
其中 1-8 是 字面量。? 9-18 是 符號引用。

上述的14種常量,每一種都有自己的數(shù)據(jù)結(jié)構(gòu)。
下面 有一片博客專門介紹 如何分析 : 生成 的 class 文件。
http://www.itdecent.cn/p/4224b896516e
3 訪問標(biāo)志

根據(jù)上面的表格,測試類的訪問標(biāo)志為ACC_PUBLIC | ACC_SUPER = 0x0001 | 0x0020 =1 | 32 = [00000000][00000001] | [00000000][00010000] = [00000000][00010001] = 33 = 0x0021 。
是 普通類,不是接口、枚舉或注解、被public 聲明但沒有聲明? final 和 abstract ,并且使用了 1.2 jdk 作編輯器。

類索引,接口索引集合,父類索引。

0003 是 類索引? ,0004 是 父類 索引,0001 是接口集合大小,后面的 0005 是實現(xiàn)的接口。占一個 u2。從左到右。
