首先来看一下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