Java 快速';这';关键字查询-通知帮助

Java 快速';这';关键字查询-通知帮助,java,android,keyword,Java,Android,Keyword,因此,在理解java中“this”关键字的用法时,基本上遇到了困难。已经阅读了大约五篇教程,尽管不是很好。有人能快速解释一下它是如何与下面的代码相关联地使用的吗?这是一个安卓系统,它将一个xml按钮(btn_确认)分配给按钮类型为的b Button b = (Button)this.findViewById(R.id.btn_confirm); b.setonclickListener(this); 完整代码: public class dic_tut2 extends Activit

因此,在理解java中“this”关键字的用法时,基本上遇到了困难。已经阅读了大约五篇教程,尽管不是很好。有人能快速解释一下它是如何与下面的代码相关联地使用的吗?这是一个安卓系统,它将一个xml按钮(btn_确认)分配给按钮类型为的b

   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);

}

}

引用您在其中使用它的类的当前实例。例如:

class A {
    public void f() {
       A obj = this; // current instance of 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'.      
}

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

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”既是一个在其视图中可以有按钮的活动,也是一个实现OnClickListener的活动,它允许在单击该按钮时由该按钮调用其onClick方法。这是通过向按钮的setOnClickListener函数提供对自身的引用来实现的

b.setonclickListener(this);
这意味着
b
的单击侦听器是
This
:当前对象。在本例中,这是您的
活动

活动
实现了
onclick监听器
,它提供了
onclick
方法

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

它不必是
这个
,它可以是实现
OnClickListener
的任何东西。通过将实现保持在
活动
的本地,可以方便地访问其(活动的)成员变量(在本例中不需要)


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

已经读了两遍,对于我发布的两行代码,或者对于它本身,都没有任何意义。感谢您的回复。可能重复的嘿!Android应用程序中没有main!;)好的,这不是相关的,这只是一个例子。它可以是任何方法。这也被标记为Java btw。感谢您的回复。我的主要问题是我不明白为什么需要它。您使用了this关键字,但我真的看不出它有什么作用。我真的很抱歉,这完全没有意义。@user1068042:我们好好想想。您的侦听器必须是当前类的实例,对吗?如果不使用“this”,则必须自己创建一个新实例,并将其设置为侦听器。但是有了“this”,你可以只设置当前对象。但是当前对象是什么?声明(b.setonClickListener(this);),我不确定它是做什么的,它指的是什么“this”。我已经更新了我的原始帖子,我理解“this.findviewbyd”,因为没有“this”,我们每次使用它时都需要创建a.findviewbyd、b.fiendViewByID等。我的想法正确吗?再次感谢。谢谢你的解释。我不明白为什么在b.setOnClickListener中没有使用onClick方法,也不明白“this”如何引用onClick。我在这里的想法正确吗?或者我在代码如何工作方面有问题吗?两种方法都可以。通过在函数外部使用它,可以更轻松地操作onClick函数中的活动。这种方法的缺点是,如果您想在活动中使用多个按钮,则每次都需要检查哪个按钮调用了onClick函数。如果我们在b.setOnClickListener中使用'this'关键字而不是'onClick',您是指最后一句话吗,如果有多个按钮,我们需要检查哪个函数调用了它?例如,如果我们有b.setOnClickListener(这个)和c.setOnClickListener(这个)?还是我误解了你的意思?还有两件事还不确定,1)“this”在代码中是如何指onClick方法的,2)您在上一次回答中的第二句话是什么意思。抱歉,我真的很感谢你的帮助。是的,这就是我的意思。对于第一个问题:它指的是onClick()方法,因为当在onCreate()中使用“this”时,它指的是当前对象,它只能是MainActivity的对象,因为onCreate()在MainActivity中。