class MyClass1 {
int x = 10;
public static void main(String[] args) {
MyClass1 obj = new MyClass1();
obj.execute();
}
private void execute() {
Thread t = new Thread(new Runnable(){
@Override
public void run() {
System.out.println(this);
System.out.println(MyClass1.this.x);
}
});
t.start();
}
}
这里指的是匿名内部类的对象。这就是为什么this.x不起作用的原因。但是我们如何使用它来引用MyClass1对象呢?请解释。当我们执行Sysout(this)时,它打印出com.java.MyClass1$1@3cd7c2ce,其中$指定内部类对象。我不清楚这一点。
答案 0 :(得分:5)
您不能在静态方法中使用this
关键字,因为this
指向类的实例,而在静态方法中,您不能使用{{1}}关键字;有一个实例。
答案 1 :(得分:3)
创建匿名内部类的方法不是实例方法,而是静态方法。
此外,语法为MyClass1.this.x
,而非this.x
。
要使其正常工作,请按以下方式重写:
class MyClass1 {
int x= 10;
public static void main(String[] args) {
new MyClass1().main();
}
private void main() {
Thread t= new Thread(new Runnable(){
@Override
public void run() {
System.out.println(this);
System.out.println(MyClass1.this.x);
}
});
t.start();
}
}