在我的代码中引用的'this'关键字是什么?

时间:2013-05-10 21:53:29

标签: java this instance keyword

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;

import javax.swing.*;
import java.awt.event.*;

public class CursorClass implements ActionListener{
        JButton btn;
        JFrame frame;

    public static void main(String[] args) {
        CursorClass cc = new CursorClass();
        cc.launchButton();
    }

    public void launchButton(){
        frame = new JFrame("Main Window");
        frame.setSize(400, 400);

        btn = new JButton("Close Main Window");
        btn.setSize(100,100);

        btn.addActionListener(this); // <-------- 

        JPanel pnl = new JPanel();
        pnl.add(btn);

        frame.add(pnl);
        frame.setVisible(true);
    }

    public void actionPerformed(ActionEvent event){
        System.out.print("Exiting..");
        System.exit(0);
    }
}

正如您在launchButton方法中看到的那样...... btn.addActionListener(this)函数..

this是什么?指的是?

它是指整个CursorClass吗? 我在这里有点困惑。我无法理解我传递给按钮对象的内容。我知道我已将ActionListener添加到它..现在按钮(它是事件源)将在单击时响应按钮,但在该方法中添加this ..我无法看到{ {1}}是..我知道最常见的答案是this指的是当前对象等。 但是我需要一些更具体的内容..我的课程是否被认为是this

5 个答案:

答案 0 :(得分:3)

您的CursorClass实施ActionListenerthis指的是CursorClass的当前实例。本质上,代码将本身(“this”对象)添加为动作侦听器。

它引用CursorClass实例的原因是因为它是从launchButton调用的,这是CursorClass中的方法。

答案 1 :(得分:2)

正如您的代码中执行的那样,

this完全引用在那里创建的实例cc

CursorClass cc = new CursorClass();

在实例化之后,您调用:

cc.launchButton();

因此,在您的示例中,thiscc

addActionListener的方法签名为public void addActionListener(ActionListener l),因此您必须传递ActionListener的实例,正如您在类定义中所看到的那样:

public class CursorClass implements ActionListener{

CursorClass是一个有效的类,因为它实现了ActionListener。

您在此处可以看到的是observer pattern,其中通知方法是已实施的方法public void actionPerformed(ActionEvent e){...}

答案 2 :(得分:1)

您班级的对象被视为this

假设您有两个CursorClass对象,A&amp;乙

因此,对象A中的this将引用对象A&amp;对象B中的this将引用对象B.

答案 3 :(得分:0)

是的,java和其他面向对象语言中的this指的是当前的类。

所以在你的情况下这= = CursorClass

答案 4 :(得分:0)

最简单的答案是它引用了这个类的对象,或者是一个扩展这个类的类,它调用了方法(launchButton())。