首先来看一下ClassFile,类注释如下:

   A JVM class file.

   Generic Java classfiles have one additional attribute for classes,   methods and fields:

    "Signature" (u4 attr-length, u2 signature-index)

   A signature gives the full Java type of a method or field. When   used as a class attribute, it indicates type parameters, followed   by supertype, followed by all interfaces.

      methodOrFieldSignature ::= type      classSignature         ::= [ typeparams ] supertype { interfacetype }

   The type syntax in signatures is extended as follows:

      type       ::= ... | classtype | methodtype | typevar      classtype  ::= classsig { '.' classsig }      classig    ::= 'L' name [typeargs] ';'      methodtype ::= [ typeparams ] '(' { type } ')' type      typevar    ::= 'T' name ';'      typeargs   ::= '<' type { type } '>'      typeparams ::= '<' typeparam { typeparam } '>'      typeparam  ::= name ':' type

   This class defines constants used in class files as well   as routines to convert between internal ``.'' and external ``/''   separators in class names.

一些常量定义(由虚拟机严格规定)如下:
public final static int JAVA_MAGIC = 0xCAFEBABE;  // 魔数

    // 常量池中14种常量项
    public final static int CONSTANT_Utf8 = 1;
    public final static int CONSTANT_Unicode = 2;
    public final static int CONSTANT_Integer = 3;
    public final static int CONSTANT_Float = 4;
    public final static int CONSTANT_Long = 5;
    public final static int CONSTANT_Double = 6;
    public final static int CONSTANT_Class = 7;
    public final static int CONSTANT_String = 8;
    public final static int CONSTANT_Fieldref = 9;
    public final static int CONSTANT_Methodref = 10;
    public final static int CONSTANT_InterfaceMethodref = 11;
    public final static int CONSTANT_NameandType = 12;
    public final static int CONSTANT_MethodHandle = 15;
    public final static int CONSTANT_MethodType = 16;
    public final static int CONSTANT_InvokeDynamic = 18;

    public final static int MAX_PARAMETERS = 0xff; // max_parameters
    public final static int MAX_DIMENSIONS = 0xff; // max_dimensions
    public final static int MAX_CODE = 0xffff; // max_code
    public final static int MAX_LOCALS = 0xffff; // max_locals
    public final static int MAX_STACK = 0xffff; // max_stack

ClassReader类的注释如下:

 This class provides operations to read a classfile into an internal   representation. The internal representation is anchored in (立足于) a   ClassSymbol which contains in its scope symbol representations   for all other definitions in the classfile.

   Top-level Classes themselves appear as members of the scopes of PackageSymbols.

  Error Diagnoses  Buffer Access  Constant Pool Access  Reading Types  Reading Attributes  Reading Java-language annotations  Reading Symbols  Adjusting flags  Loading Classes  Loading Packages
 

参考文章:

http://blog.csdn.net/column/details/jvm-principle.html

05-11 19:47