快速'此'关键字查询 - 帮助感谢

时间:2011-11-27 16:04:16

标签: java android keyword

因此基本上无法理解java中'this'关键字的用法。已阅读了大约五个教程,虽然不是很好。有人可以快速解释它与以下代码的关系吗?这是一个android,它使用Button类型为b分配一个xml按钮(btn_confirm)。

   Button b = (Button)this.findViewById(R.id.btn_confirm);

b.setonclickListener(this);

完整代码:

public class dic_tut2 extends Activity implements onclickListener {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button b = (Button)this.findViewById(R.id.btn_confirm);
    b.setonclickListener(this);
}

public void onclick(View v) {

    TextView tv = (TextView)this.findViewById(R.id.tv_welcome);
    EditText et = (EditText)this.findViewById(R.id.txt_name);

    String text = "Hello, " + et.getText().toString() + ".\n\n";
    text += "Welcome to android development. :)";

    tv.setText(text);

}

}

3 个答案:

答案 0 :(得分:0)

this指的是您正在使用它的类的当前实例。例如:

class A {
    public void f() {
       A obj = this; // current instance of A
    }
}

所以如果以后我创建一个A:

的实例
public static void main(String[] args) {

    A a = new A();
    a.f(); // the 'this' inside f() is actually 'a'.
}

所以你的代码:

b.setonclickListener(this);

将按钮b的onclickListener设置为您所在班级的当前实例(您调用该方法的实例)。

修改:好的,这是一个完整的例子:

class A {
   public char c;
   public A(char c) { this.c = c; }
   public void f() {
       System.out.println(this.c);
   }
}

public static void main(String[] args) {
   A a = new A('a');
   a.f(); // prints 'a' because 'this' inside f() is actually object 'a'.

   A b = new A('b');
   b.f(); // prints 'b' because 'this' inside f() is actually object 'b'.      
}

答案 1 :(得分:0)

在您看到的示例中,该类很可能是一个活动类。像这样:

class MainActivity extends Activity implements OnClickListener {

    @Override
    protected onCreate(Bundle bundle) {
        Button b = (Button)this.findViewById(R.id.btn_confirm);

        b.setOnClickListener(this);

    } 

    @Override
    public onClick(View v) {
        // Do something!
    }
}

这是可能的,因为对象“this”既是一个可以在其View中有一个按钮的活动,它也实现了OnClickListener,它允许在单击该按钮时由该按钮调用onClick方法。这是通过向按钮的setOnClickListener函数提供对自身的引用来完成的。

答案 2 :(得分:0)

b.setonclickListener(this);

这意味着b的点击监听器是this:当前对象。在这种情况下,它是您的Activity

Activity实施OnClickListener,提供onclick方法。

你基本上是在说“按钮,当你点击它时,这里是如何处理它 - 你用我自己的实现来处理它。”

它不会 this,它可能是实现OnClickListener的任何内容。通过将实现保持在Activity本地,您可以轻松访问其(Activity)成员变量(在这种情况下您不需要)。

onclick处理程序中,this引用是多余的 - 您可以在没有findViewById的情况下访问this方法。可以在没有限定符的情况下访问成员方法和变量。