我编译了以下代码(为简洁起见,省略了方法和变量):
// Outer.java
public class Outer
{
private class Inner
{
}
void someMethod()
{
Inner inObj = this.new Inner();
}
public static void main(String s[])
{
Outer outerObj = new Outer();
}
}
当我列出创建的类时,它显示以下内容:
Outer$1.class
Outer$Inner.class
Outer.class
Outer and 外部$内部显得合乎逻辑。目的是什么Outer$1班级?这些在时间尺度上的创建顺序是什么?
好奇的。我不确定这是做什么用的。但是如果你反编译这些类,你可以看到how它的用途是:
public class Outer {
public Outer();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
void someMethod();
Code:
0: new #2 // class Outer$Inner
3: dup
4: aload_0
5: aconst_null
6: invokespecial #3 // Method Outer$Inner."<init>":(LOuter;LOuter$1;)V
9: astore_1
10: return
public static void main(java.lang.String[]);
Code:
0: new #4 // class Outer
3: dup
4: invokespecial #5 // Method "<init>":()V
7: astore_1
8: return
}
class Outer$Inner {
final Outer this$0;
Outer$Inner(Outer, Outer$1);
Code:
0: aload_0
1: aload_1
2: invokespecial #1 // Method "<init>":(LOuter;)V
5: return
}
class Outer$1 {
}
So, Outer$1
似乎不包含任何内容 - 甚至没有默认构造函数。但参考一个Outer$1
必须传递给Outer$Inner
来构建它。神秘的是,传入的值someMethod
is null
(第 5 行在someMethod
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)