http://www.i170.com/Forum/113657
10 , JVMS- class File Format- , AAA。 ?
1、 class , CHAPTER 4 The class File Format ;
2、 , 。
3、 , 。
CHAPTER 4 The class File Format
pseudostructures: class , 。 items,Successive items are stored in the class file sequentially, without padding or alignment. , , constant_pool_count xxx_count。
Tables varying-sized structures , an array fixed-sized items 。
4.1 The ClassFile Structure
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
7 , cp_info 、field_info、method_info attribute_info。
:
1、 10 :JDK1.0.2 class 3.45,version0.50。
2、u2 constant_pool_count 16( 15 ), 0 。 , cp_info 。constant_pool table 。 。
3、 : access_flags , ;this_class、super_class constant_pool 。
4、field_info、method_info attribute_info, jclasslib 。
4.2 The Internal Form of Fully Qualified Class and Interface Names
class fully qualified form , import ;java.lang.Object / 。
4.3 Descriptors
A descriptor using UTF-8 strings (§4.4.7) the type of a field or method.
4.4 The Constant Pool
,class constant_pool table, 。 JVM / / / , constant_pool table (symbolic information )。
constant_pool table / (entries) u1 1-byte tag , 。
public class Yqj{
public static int i = 5;
private final double doo = 5.2;
String str = "hello";
public Object foo(){
int iiiiii = 100;
return "hello";
}
}
AAA ,37-1 constant_pool table 。 index-tag-
1、CONSTANT_Methodref (10) 。 5u
2、CONSTANT_Double (6). 2 # double 5.2, 9u
4、CONSTANT_Fieldref (9), #8 #31 Yqj,dooD, 5u
5、CONSTANT_String (8). string_index CONSTANT_Utf8_info #32, 。3u
6、CONSTANT_Fieldref (9), #8 #33 Yqj,strLjava/lang/String
7、CONSTANT_Fieldref (9), #8 #34 Yqj,iI
8、CONSTANT_Class (7). #35 Yqj。3u
9、CONSTANT_Class (7). #36 java/lang/String。3u
10-29,CONSTANT_Utf8 (1). Utf8 。 :
#10(i),#11(I),#12(doo),#13(D),#14(ConstantValue),
#15(str),#16(Ljava/lang/String),#17(<init>),#18(()V),#19(Code),
#20(LineNumberTable),#21(LocalVariableTable),#22(this),#23(Lyqj),
#24(foo),#25(()Ljava/lang/Object),#26(iiiiii),#27(<clinit>),
#28(SourceFile),#29(Yqj.java),
30、CONSTANT_NameAndType (12). #17,#18 ,<init> ()V
31、CONSTANT_NameAndType (12). #12,#13 ,<doo> D
32、CONSTANT_Utf8 (1).hello
33、CONSTANT_NameAndType (12). #15,#16 ,str Ljava/lang/String
34、CONSTANT_NameAndType (12). #10,#11 ,i I
35、CONSTANT_Utf8 (1).Yqj
36、CONSTANT_Utf8 (1).java/lang/String
JVM (java/lang/String、<init>、()V、I、SourceFile )、 (LYqj、i、doo、iiiiii、foo), 5.2CONSTANT_Double, #32 CONSTANT_Utf8 constant_pool table。
Note: LocalVariableTable is not a necessary attribute. Some compilers even do not generate a LocalVariableTable in .class files, e.g. the jdk 1.4.2_11.