1

可能重复:
Java this.method() vs method()

我一直在阅读一些东西并做一些关于 android java 的教程,但我仍然不明白“this”是什么意思,就像下面的代码一样。

    View continueButton = this.findViewById(R.id.continue_button);
    continueButton.setOnClickListener(this);
    View newButton = this.findViewById(R.id.new_button);
    newButton.setOnClickListener(this);

另外为什么在这个例子中,一个按钮不是用 Button 而是用 View 定义的,有什么区别?

附言。伟大的网站!尝试学习 java 并通过在这里搜索得到了很多答案!

4

6 回答 6

4

this关键字是对当前对象的引用。它用于传递对象的这个实例,等等。

例如,这两个分配是相等的:

class Test{

    int a;

    public Test(){
        a = 5;
        this.a = 5;
    }

}

有时您有一个要访问的隐藏字段:

class Test{

    int a;

    public Test(int a){
        this.a = a;
    }

}

在这里,您为该字段分配了a参数中的值a

this关键字与方法的工作方式相同。同样,这两个是相同的:

this.findViewById(R.id.myid);
findViewById(R.id.myid);

最后,假设您有一个 MyObject 类,它有一个采用 MyObject 参数的方法:

class MyObject{

    public static void myMethod(MyObject object){
        //Do something
    }

    public MyObject(){
        myMethod(this);
    }

}

在最后一个示例中,您将当前对象的引用传递给静态方法。

另外为什么在这个例子中,一个按钮不是用 Button 而是用 View 定义的,有什么区别?

在 Android SDK 中,aButton是. 您可以请求as a并将其转换为 a :ViewButtonViewViewButton

Button newButton = (Button) this.findViewById(R.id.new_button);
于 2012-06-06T19:53:18.023 回答
1

this指的是被操作的对象的实例。

在上述情况下,this.findViewById(R.id.continue_button)这是指父类中的方法(特别是Activity.findViewById()or View.findViewByid(),假设您正在编写自己的子类Activityor View!)。

于 2012-06-06T19:53:37.757 回答
0

“this”是当前对象实例。

class Blaa
{
   int bar=0;
   public Blaa()
   {}
   public void mogrify(int bar,Blaa that)
   {
       bar=1; //changes the local variable bar
       this.bar=1; //changes the member variable bar. 
       that.bar=1; //changes "that"'s member variable bar. 
   }

}
于 2012-06-06T19:53:10.847 回答
0

this引用一个类的当前实例

于 2012-06-06T19:53:22.897 回答
0

this在 Java 中是对当前对象实例的引用。所以如果你正在为类写一个方法MyClassthis就是当前的实例MyClass

请注意,在您的情况下,写作this.findViewById(...)并不是真正必要的,并且可能被认为是不好的风格。

于 2012-06-06T19:55:03.143 回答
0

“this”在面向对象的语言(如 java、c#)中是对您正在调用该方法的对象或您正在访问其数据的对象的引用。

看看这个链接是否有助于你更多地理解“这个”——

http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

于 2012-06-06T20:14:56.897 回答