Class檔案詳解 2

2021-04-02 04:31:22 字數 1856 閱讀 3086

今天繼續分析class檔案的結構。

上次讀取了constant pool,緊接著是這個類或介面的access flags,jvm定義的關於class或inte***ce的access flags有:

private static short acc_public    = 0x0001;

private static short acc_final     = 0x0010;

private static short acc_super     = 0x0020;

private static short acc_inte***ce = 0x0200;

private static short acc_abstract  = 0x0400;

// read access flags:

short access_flags = input.readshort();

system.out.print("access flags:");

if((access_flags & acc_public) == acc_public)

system.out.print(" public");

if((access_flags & acc_final) == acc_final)

system.out.print(" final");

if((access_flags & acc_super) == acc_super)

system.out.print(" super");

if((access_flags & acc_inte***ce) == acc_inte***ce)

system.out.print(" inte***ce");

if((access_flags & acc_abstract) == acc_abstract)

system.out.print(" abstract");

system.out.println();

然後是this class和super class:

// read this class and super class:

short this_class_index = input.readshort();

short super_class_index = input.readshort();

system.out.println("this class = " + this_class_index);

system.out.println("super class = " + super_class_index);

根據this class的index可以從constant pool中得到這個class的資訊,super class也一樣。每個class都有super class,只有object的super class index=0。

接下來是這個class繼承了多少個inte***ce和每個inte***ce在constant pool中的index:

// read inte***ces count:

short inte***ces_count = input.readshort();

system.out.println("inte***ces count = " + inte***ces_count);

// read each inte***ce:

for(int i=1; i<=inte***ces_count; i++)

結果如下:

access flags: public final super

this class = 2

super class = 4

inte***ces count = 0

待續...

Class檔案詳解 2

今天繼續分析class檔案的結構。上次讀取了constant pool,緊接著是這個類或介面的access flags,jvm定義的關於class或inte ce的access flags有 private static short acc public 0x0001 private static ...

class檔案結構

000000 cafebabe 000004 0000 000006 0032 識別符號 magic 魔數 表示該檔案是標準的class檔案,jvm通過這4個位元組判斷該檔案是不是乙個class檔案 次要版本號 主要版本號 0032 jdk1.5 0033 jdk1.6 0034 jdk1.7 首先...

class檔案的格式

每個class檔案都對應唯一乙個類或介面的定義資訊,但類或介面不一定定義在檔案裡 類或介面通過類載入器直接生成 每個class檔案都是由8位元組為單位的位元組流組成,所有16,32,64位長度的資料將被構造成2,4,8個8位元組單位來表示。多位元組資料項總是按照big endian的順序進行儲存。用...