我有以下java类:
class Outer
{
private Integer a;
private Long b;
class Inner
{
public void foo()
{
System.out.println("a and b are " + a + " " + b);
}
}
}
当我在 Outer 和 Outer$Inner 上运行 javap 时,我得到以下信息:
C:\test>javap Outer
Compiled from "Outer.java"
class Outer extends java.lang.Object{
Outer();
static java.lang.Integer access$000(Outer);
static java.lang.Long access$100(Outer);
}
C:\test>javap Outer$Inner
Compiled from "Outer.java"
class Outer$Inner extends java.lang.Object{
final Outer this$0;
Outer$Inner(Outer);
public void foo();
}
我有两个问题:
1)为什么java编译器生成静态方法,在外部类中使用'Outer'参数来访问它的私有变量?为什么不是内部类可以通过其 this$0 成员轻松调用的实例方法?
2)为什么内部类中的 this$0 是 final ?如果它不是最终的会发生什么?
谢谢并恭祝安康。