2017-05-24 13 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です。

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.this'でコード内で参照できる' MyClass1'型の 'hidden'フィールドを取得します。 –

関連する問題