2012-06-06 229 views
1

可能重複:
Java this.method() vs method()「這」是什麼意思?

我一直在讀了一些東西,做關於Android的Java一些教程,但我還是不明白什麼是「這個」手段,如下面的代碼。

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

此外,爲什麼它在這個例子中,一個按鈕沒有定義與按鈕,但與視圖,有什麼區別?

ps。偉大的網站!試圖通過在這裏搜索學習java並獲得ALLOT的答案!

+0

你不會知道。因爲'this'是代碼存在的方法的接收者。由於我們沒有代碼,我們無法回答。 –

+2

以下是[this]的官方Java解釋(http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html)。 – Sam

+0

@Mark不一定是這個問題的一個騙局,因爲OP也詢問'setOnClickListener(this)' –

回答

4

this關鍵字是a reference to the current object。它用於通過這個實例的對象,等等。

例如,這兩個分配是平等的:

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

} 

在最後這個例子中,你通過的一個參考當前對象爲靜態方法。

此外,爲什麼它在這個例子中,按鈕沒有定義與按鈕,但與視圖有什麼區別?

在Android SDK中,一個ButtonView一個subclass。您可以要求ButtonViewcastViewButton

Button newButton = (Button) this.findViewById(R.id.new_button); 
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. 
    } 

} 
0

this是指一類

+0

'this'不是當前實例。它是一個指向當前實例的指針。 –

+0

@JayD在上面的答案中注意到了「引用」這個詞,在Java中只有引用有_no_指針。 –

+0

檢查此關鍵字的鏈接.. http://www.javabeat.net/qna/16-what-is-super-and-this-keyword-in-java/ – swiftBoy

1

this指的是正在採取行動的對象實例的當前實例。

在你有以上的情況下,this.findViewById(R.id.continue_button)這指的是一個方法在父類(具體要麼Activity.findViewById()View.findViewByid(),假設你正在寫自己的ActivityView子!)。在Java中是

+0

該代碼可以放在一個自定義的視圖和它仍然可以很好地工作。說它唯一的Activity.findViewById()並不完全正確。 – HandlerExploit

+0

「this.someMethod」不一定會調用父類中的方法。事實上,'this'不會在這種情況下添加信息,就像'super'那樣。 (除非通過「父類」你的意思是「這個實例的類)。 –

+1

@HandlerExploit謝謝你指出,我會相應地更新。 –

0

this是對當前對象實例的引用。因此,如果您正在編寫MyClass類的方法,則thisMyClass的當前實例。

請注意,在你的情況下,編寫this.findViewById(...)並不是真的必要,並且可能被認爲是不好的風格。