Access Flags 占2個位元組,所以該位元組碼文件的訪問標誌是00 21,0x0021在 Access Flags 中是0x0020和0x0001的並集,表示 ACC PUBLIC與 ACC SUPER合併的結果。說明該類的聲明修飾是public並且繼承Object ...
一、Access Flags 訪問標誌
訪問標誌信息包括該 Class 文件是類還是介面,是否被定義成 public 或者 abstract , 如果是類,是否被聲明成 final。
訪問標誌表
二、Access Flags 的分析
通過上一篇JAVA位元組碼文件之第二篇(常量池)的分析可知該class文件的常量池結束部分在 63 74的位置
Access Flags 占2個位元組,所以該位元組碼文件的訪問標誌是00 21,0x0021在 Access Flags 中是0x0020和0x0001的並集,表示 ACC PUBLIC與 ACC SUPER合併的結果。說明該類的聲明修飾是public並且繼承Object
三、This Class Name 的分析
This Class Name 占 Access Flags之後的兩個位元組所以是00 03。索引等於3,對應常量池中的#22 ,就是當前類的名稱
四、Super class Name 的分析
Super class Name占 this Class Name 之後的兩個位元組所以是 00 04。索引等於4,對應常量池中的#4,就是當前類的父類
五、Interface 的分析
Interface 占Super class Name 之後的 2+n個byte,前兩個byte是介面的數量,之後的n個byte表示介面的具體信息。
由於 Interface num=00 00 ;所以該類沒有實現任何介面,也就是沒有索引與常量池進行匹配。
六、Fields 的分析
Fields的範圍:欄位表用於描述類和介面中聲明的變數。這裡的欄位包含了類級別變數(靜態變數)以及實例變數,但是不包括方法內部聲明的局部變數
屬性表集合:
Fields 占 Interface 之後的2+n個byte,前兩個byte是Fields 的數量,之後的n個byte表示Fields的具體信息。
由於 Fields num= 00 01;所以該類具有一個成員變數。
u2 access_flags :00 02 ,訪問標識的是0002,ACC_PRIVATE
u2 name_index: 00 05,名字的索引是5,對應常量池的#5
u2 descriptor_index :00 06,描述符的索引是6,對應常量池的#6 ,所以變數的類型是int
u2 attributes_count:00 00 ,擴展屬性為0,所以該變數沒有擴展屬性,所以就不存在 attribute_info
attribute_info attributes[attributes_count];