2016-02-20 2 views
0

Я новичок в java и android и хочу понять, как работает this?Этот указатель на java

public class MainActivity extends AppCompatActivity { 
    private class MyThread implements Runnable 
    {  
     @Override 
     public void run() 
     { 
      MainActivity.this.runOnUiThread(new Runnable()) { 
       @Override 
       public void run() 
       { 
        loadingSection.setVisibility(View.VISIBLE); 
       } 
      }); 
      downloadImageUsingThreads(url); 
     } 
    } 
} 

Что такое MainActivity.this?

MainActivity - класс, так как работает MainActivity.this?

+3

http://stackoverflow.com/questions/2411270/when-should-i-use-this-in-a-class – Madhur

+0

см http://stackoverflow.com/questions/9656097/this-keyword -in-android – sasikumar

+1

Поскольку вы используете код в контексте 'MyThread',' this' указывает на экземпляр 'MyThread', чтобы вы могли ссылаться на внешний класс, вам нужно использовать' MainActivity.this' , который возвращает экземпляр внешнего класса – MadProgrammer

ответ

2

Java не имеет указателей. Однако Object (ы) реализованы со ссылками.

В вашем примере у вас есть внутренний класс (MyThread). MyThread обращается к экземпляру внешнего класса (MainActivity), в котором он был создан .

1

Что такое MainActivity.this?

ключевое слово this указывает, что вы передаете в качестве аргумента фактический экземпляр класса,

, какой класс?: MainActivity класс

2

MyThread является inner class из MainActivity, поэтому экземпляр MyThread связан с экземпляром MainActivity.

Код MyThread, this относится к примеру MyThread. Чтобы получить доступ к экземпляру MainActivity, вы должны получить его, написав MainActivity.this.

class A { 
    int fieldA; 

    class B { 
     int fieldB; 

     void methodB() { 
      // This method can be executed for an instance of B, 
      // so it can access the fields of B. 
      this.fieldB = 13; 

      // Since B is a non-static nested class of A, 
      // it can also access the fields is A 
      A.this.fieldA = 66; 
     } 
    } 

    void methodA() { 
     // This method can be executed for an instance of A, 
     // so it can access the fields of A. 
     this.fieldA = 42; 

     // In order to create an instance of class B, you need 
     // and instance of class A. This is implicitly done here. 
     new B(); // The new B object is associated with the A 
       // object defined by 'this'. 
    } 
} 
Смежные вопросы