2013-10-13 122 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

相关问题