66,class檔案欄位列表_v1

型別

名稱

數量

u2

fields_count

1

u2

fields

fields_count

欄位表

用於描述介面或類中宣告的變數,包括類級變數或例項變數,不包區域性變數。修飾字段作用域(public,private,protected等)是例項變數還是類變數(static)可變性(final)併發可見性(volatile 是否強制從記憶體讀取)。

欄位表的具體結構如下:

型別

名稱

數量

型別

名稱

數量

u2

access_flags

1

u2

attributes_count

1

u2

name_index

1

attribute_info

attributes

attributes_count

u2

descriptor_index

1

欄位修飾符放在

access_flags 專案中,與類中 access_flags 專案非常類似如下:

標誌名稱

標誌值

含義

標誌名稱

標誌值

含義

ACC_PUBLIC

0x0001

欄位是否public

ACC_VOLATILE

0x0040

欄位是否volatile

ACC_PRIVATE

0x0002

欄位是否private

ACC_TRANSIENT

0x0080

欄位是否transient

ACC_PROTECTED

0x0004

欄位是否protected

ACC_SYNTHETIC

0x1000

欄位是否由編譯器自動產生

ACC_STATIC

0x0008

欄位是否static

ACC_ENUM

0x4000

欄位是否enum

ACC_FINAL

0x0010

欄位是否final

ACC_PUBLIC,ACC_PROTECTED,ACC_PRIVATE 只能選其一,介面欄位必須有ACC_PUBIIC,ACC_STATIC,ACC_FINAL標誌,這些都是語言規則所導致的。

全限定名

:如“com/bzy/demo” 是這個類的全限定名,緊把類中。替換/而已,為多個全限定名混淆中間加; 符號。

簡單名稱

:沒有型別或 引數修飾符的方法或者欄位名稱。

描述符

:描述欄位資料型別,方法引數列表(數量,型別,及順序)返回值。

標識字元

含義

標識字元

含義

B

基本型別 byte

L

基本型別 long

C

基本型別 char

S

基本型別 short

D

基本型別 double

Z

基本型別 boolean

F

基本型別 float

I

基本型別 int

L

物件型別,如java/lang/Object

陣列型別

每維度用一個前置[ 符號,如 java。lang。String[][] 二維陣列將被記成 “[[Ljava/lang/String;” 整型int[] 記成“[I”,用描述符來描述方法時,按先引數列表,後返回值的順序描述,引數列表按引數順序放在一組小括號()內。如方法 void inc() 描述符“()V” 方法java。lang。String。toString() 描述為 “()Ljava/lang/String”,一個整型陣列“int[]”被記錄成“[i”。

用描述符來描述方法時,按照

先引數列表,後返回值的順序描述,

引數列表按照引數嚴格順序放在一組小括號()內,如方法void inc()的描述符為“()v”,方法java。lang。String。toString()描述符為“()java/lang/String”。