2017-05-24 82 views
1
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)时,它会输出[email protected],其中$指定内部类对象。我不清楚这一点。引用匿名内部类中的实例变量

+0

你'this'是匿名的Runnable类,而不是MyClass1的。 –

+2

@HovercraftFullOfEels不应该为静态主类中的类成员变量工作或? – SomeJavaGuy

+3

@SomeJavaGuy:完全正确。需要。更多。咖啡! –

回答

5

不能使用this关键字在静态方法,因为this指向一个实例的类的和静态方法,你没有一个实例。

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(); 
    } 
} 
+0

我明白这里指的是匿名内部类的对象。因此,如果它是一个实例方法,它仍然指向匿名内部类,那么如何将它引用为MyClass1.this.x?我的意思是我们如何使用这个来引用MyClass1 obj?我仍然不清楚这一点。 –

+0

在这个例子中,MyClass1的一个实例方法创建一个内部类。内部类获得'MyClass1'类型的'隐藏'字段,您可以通过'MyClass1.this'在代码中引用该字段。 –