Java 此代码示例中此引用的关键字是什么?

Java 此代码示例中此引用的关键字是什么?,java,android,Java,Android,NewPlanet.this引用了什么上下文?为什么类Toast中的makeText需要此上下文?我理解在引用类时使用关键字this以及在this.field中使用点符号访问其字段和构造函数时,但是当this关键字位于类引用之后时会怎样呢?NewPlanet。这是对外部类的this的引用。实际上,您使用的是匿名内部类 实例NewPlanet。此表示外部类NewPlanet的对象。如果您只使用了this,它将表示匿名类OnClickListener的实例 编译后,您将得到如下结果: marsIma

NewPlanet.this
引用了什么上下文?为什么类
Toast
中的
makeText
需要此上下文?我理解在引用类时使用关键字
this
以及在
this.field
中使用点符号访问其字段和构造函数时,但是当
this
关键字位于类引用之后时会怎样呢?

NewPlanet。这是对外部类的
this
的引用。实际上,您使用的是匿名内部类

实例
NewPlanet。此
表示外部类
NewPlanet
的对象。如果您只使用了
this
,它将表示匿名类
OnClickListener
的实例

编译后,您将得到如下结果:

marsImage.setOnClickListener$1(新的OnClickListener$1(this))


它是对调用onCreate()方法的NewPlanet的引用,因此它是对封闭的外部类实例的引用,而不是对NewPlanet类的引用?是的。如果要访问其类的引用,可以执行
NewPlanet.this.getClass()
public class NewPlanet extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add);

    ImageView marsImage = (ImageView) findViewById(R.id.imageMars);
    marsImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            WorldGen mars = new WorldGen("Mars", 642, 3.7);
            mars.setPlanetColonies(1);
            Toast.makeText(NewPlanet.this, "Mars Created", Toast.LENGTH_SHORT).show();
        }
    });
 }
}
 static class OnClickListener$1 implements OnClickListener {
        private final NewPlanet ref;
        OnClickListener$1(NewPlanet ref) {
           this.ref= ref;
        }

        @Override
        public void onClick(View v) {
            WorldGen mars = new WorldGen("Mars", 642, 3.7);
            mars.setPlanetColonies(1);
            Toast.makeText(ref, "Mars Created", Toast.LENGTH_SHORT).show();
        }
    }