CSDN博客

img asklxf

Class文件详解 (2)

发表于2004/10/26 19:10:00  4752人阅读

今天继续分析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

待续...
阅读全文
0 0

相关文章推荐

img
取 消
img