源文件T.java
public class T {
public void test() {
int a=1,b=1,c=1,d=2;
System.out.println(a + "s" + b + c + d);
}
}
我们通过javac T.java 命令编译,然后再使用javap -verbose T命令查看编译后的class文件结构
编译生成的T.class文件结构:
public void test();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=3, locals=5, args_size=1
0: iconst_1
1: istore_1
2: iconst_1
3: istore_2
4: iconst_1
5: istore_3
6: iconst_2
7: istore 4
9: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
12: new #3 // class java/lang/StringBuilder
15: dup
16: invokespecial #4 // Method java/lang/StringBuilder."":()V
19: iload_1
20: invokevirtual #5 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
23: ldc #6 // String s
25: invokevirtual #7 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
28: iload_2
29: invokevirtual #5 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
32: iload_3
33: invokevirtual #5 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
36: iload 4
38: invokevirtual #5 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
41: invokevirtual #8 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
44: invokevirtual #9 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
47: return
LineNumberTable:
line 3: 0
line 4: 9
line 5: 47
上面的源码只截取了test方法的编译结果。我们重点关注Code部分。