我在下面编写了运行良好的代码,但我对合成方法有一个疑问。因为这些是为了访问私有数据而生成的。但我有在成员类中使用的外部类的公共实例变量,所以为了访问实例变量,它创建了合成方法(因为它在类文件中!!)。
代码片段如下:
public class TestInnerClass {
public int x = 10;
public static void main(String[] args) {
TestInnerClass test= new TestInnerClass();
A obj = test.new A();
obj.display();
}
class A {
void display() {
System.out.println(x);
}
}
}
类文件生成如下。 对于内部类 A 作为 TestInnerClass$A:
import java.io.PrintStream;
class TestInnerClass$A {
TestInnerClass$A(TestInnerClass paramTestInnerClass) {
}
void display() {
System.out.println(this.this$0.x);
}
}
为 TestInnerClass 生成类文件:
import java.io.PrintStream;
public class TestInnerClass {
public int x = 10;
public static void main(String[] args) {
TestInnerClass test = new TestInnerClass();
TestInnerClass tmp13_12 = test; tmp13_12.getClass(); A obj = new A();
obj.display();
}
class A {
A() {
}
void display() {
System.out.println(TestInnerClass.this.x);
}
}
}
所以我的疑问是:
1)。为什么显示方法在类文件中有不同的定义?
2)。为什么在 TestInnerClass 类文件中的实例变量被访问为TestInnerClass.this.x。但是相同的代码在 TestInnerClass$A 的类文件中与this.this$0.x 不同?
3)为什么JVM创建合成方法this$0,但是实例变量是公共的?