2013-10-13 177 views
1

我是Java/Android新手。我不明白addActionListener(this)中的「this」。 我看了很多書和論壇,但我仍然混淆了以下內容:「this」關鍵字在Java的「.addActionListener(this)」中引用了什麼?

有人解釋: 「這」是一個refernce當前對象」

註冊事件處理程序類的一個實例作爲listenser 。在一個或多個組件 someComponent.addActionListener(instanceofMyClass);

行,我明白,這是一個類的對象

然而,有人解釋: 「這」代表實現和插件。整體化的ActionListener,這恰好是你的類。

所以「this」可以是一個類的對象,也可以是「類」。 這是我不明白的。

有人會向我解釋清楚。謝謝!

+1

'這不是一個階級,永遠。它始終是一個對象,* current *對象。 –

回答

1

這裏發生了什麼。在下面的示例中,SomeClass實現了ActionListener接口,該接口只有一個需要實現的方法(actionPerformed以ActionEvent對象作爲參數)。但是,爲了實現此方法,您需要一個對象。「this」引用SomeClass的一個對象。

public class SomeClass implements ActionListener{ 

    SomeClass(){ 
    Button aButton = new Button("Click Me"); 
    aButton.addActionListener(this); 
    } 

    public static void main(String[] args) { 
     SomeClass object = new SomeClass(); 
    } 

    public void actionPerformed(ActionEvent e) { 
    //do Something when user clicks the button 
    } 
} 
+0

這是指SomeClass的一個對象。但是,我們還沒有創建一個對象?沒有使用'新' – user1232250

+1

我添加了主要的方法來清除它。 – lochi

+1

@ user1232250:在創建SomeClass的實例之前,不會執行此代碼。 – kcoppock

2

This總是指當前對象,它不是一個類。有時候人們錯誤地說他們的意思是對象,那就是全部。

+0

嗨,我有一個疑問,請參閱此[示例](http://stackoverflow.com/a/18585247/3228960)注意行CREATE MyButton m = new MyButton(this);正如你所說的那樣,這是指對象,但在MyButton類的構造函數中,它被稱爲接口,這是如何發生的?我的理解是,當他傳遞這個(一個對象),所以在構造函數中他應該提到一個對象(MyActivity對象)而不是接口。對不起,如果你介意這是一個愚蠢的問題。 –

+1

@srujan maddula在上下文中'ml'是任何實現'MyListener'接口的類的對象。它被稱爲[多態性](http://stackoverflow.com/a/3110318/2180290)。 –

2

「this」指向當前對象,因爲Java使用方法來更改對象。所以,當你在你的Activity中調用「this」時,你正在給你的方法改變一些東西。

您的代碼「someComponent.addActionListener(instanceofMyClass);」正在做同樣的事情。您正在使用「someComponent」對象並使用「addActionListener」方法。 ActionListener然後會想知道它將獲取偵聽器代碼的位置,並且您要聲明您希望從「instanceofMyClass」調用它,該實例可以與「this」交換

您可以找到另一個解釋與代碼在這裏:What is the meaning of "this" in Java?

+0

因此,如果這總是引用當前對象,那麼當前對象是什麼?沒有創建任何對象。如果我創建一個按鈕,當某人按下按鈕時,該按鈕是當前對象嗎? – user1232250

+0

如果調用「this」,它將引用由構造函數創建的對象,構造函數爲SomeClass()。一旦你有了SomeClass()對象的引用,你可以使用它的方法/變量。當有人點擊一個按鈕並調用「this.method()」時,它會和你的班級中的「方法」一樣。我建議只添加一些變量,並將「this」與變量混合在一起。製作一些全局和局部變量,看看會發生什麼。 –

1

在你的情況,「這」既是「一個對當前對象引用」和「一個實現ActionListener接口的實現」。這意味着封閉類(「this」代表)應該實現接口ActionListener。所以當單擊某個組件(或其他動作)時,將調用封閉類來處理該事件。

您可以參考下面的代碼來獲取的想法:「這」代表YourClass的一個實例,它實現ActionListener

public YourClass implements ActionListener 
{ 
    private someComponent; 
    public YourClass() 
    { 
    someComponent = new Component(); 
    someComponent.addActionListener(this); 
    } 

    public void actionPerformed() 
    { 
    //add code to process the event 
    } 
} 
+0

那麼,目前的對象是什麼? – user1232250

+0

當我實現一個接口時,會創建一個對象? – user1232250

+0

「this」代表實現ActionListener的YourClass的實例,YourClass的實例是什麼? SomeComponent? – user1232250

相關問題