Class文件详解 (2)

今天继续分析Class文件的结构。

上次读取了constant pool,紧接着是这个类或接口的Access flags,JVM定义的关于class或interface的Access flags有:

private static short ACC_PUBLIC = 0x0001;
private static short ACC_FINAL = 0x0010;
private static short ACC_SUPER = 0x0020;
private static short ACC_INTERFACE = 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_INTERFACE) == ACC_INTERFACE)
System.out.print(" interface");
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继承了多少个interface和每个interface在constant pool中的index:

// read interfaces count:
short interfaces_count = input.readShort();
System.out.println("Interfaces count = " + interfaces_count);
// read each interface:
for(int i=1; i<=interfaces_count; i++) {
short interface_index = input.readShort();
System.out.println("No. " + i + " interface index = " + interface_index);
}

结果如下:

Access flags: public final super
This class = 2
Super class = 4
Interfaces count = 0

待续...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值