class levin.test.anonymous.MyApplication {
private int field;
MyApplication();
0 aload_0 [this]
1 invokespecial java.lang.Object() [10]
4 aload_0 [this]
5 bipush 10
7 putfield levin.test.anonymous.MyApplication.field : int [12]
10 return
Line numbers:
[pc: 0, line: 7]
[pc: 4, line: 8]
[pc: 10, line: 7]
Local variable table:
[pc: 0, pc: 11] local: this index: 0 type: levin.test.anonymous.MyApplication
public void print(java.lang.Integer param);
0 ldc2_w <Long 100> [20]
3 lstore_2 [local]
4 aload_1 [param]
5 invokevirtual java.lang.Integer.longValue() : long [22]
8 ldc2_w <Long 100> [20]
11 ladd
12 lstore 4 [local2]
14 new levin.test.anonymous.MyApplication$1 [28]
17 dup
18 aload_0 [this]
19 lload 4 [local2]
21 aload_1 [param]
22 invokespecial levin.test.anonymous.MyApplication$1(levin.test.anonymous.MyApplication, long, java.lang.Integer) [30]
25 astore 6 [printer]
27 aload 6 [printer]
29 invokeinterface levin.test.anonymous.Printer.print() : void [33] [nargs: 1]
34 return
Line numbers:
[pc: 0, line: 11]
[pc: 4, line: 12]
[pc: 14, line: 13]
[pc: 27, line: 22]
[pc: 34, line: 23]
Local variable table:
[pc: 0, pc: 35] local: this index: 0 type: levin.test.anonymous.MyApplication
[pc: 0, pc: 35] local: param index: 1 type: java.lang.Integer
[pc: 4, pc: 35] local: local index: 2 type: long
[pc: 14, pc: 35] local: local2 index: 4 type: long
[pc: 27, pc: 35] local: printer index: 6 type: levin.test.anonymous.Printer
static synthetic int access$0(levin.test.anonymous.MyApplication arg0);
0 aload_0 [arg0]
1 getfield levin.test.anonymous.MyApplication.field : int [12]
4 ireturn
Line numbers:
[pc: 0, line: 8]
Inner classes:
[inner class info: #28 levin/test/anonymous/MyApplication$1, outer class info: #0
inner name: #0, accessflags: 0 default]
} |
从这两段字节码中可以看出,编译器为我们的匿名类起了一个叫MyApplication$1的名字,它包含了三个final字段(这里synthetic修饰符是指这些字段是由编译器生成的,它们并不存在于源代码中):
MyApplication的应用this$0
long值val$local2
Integer引用val$param