为什么ActionListener可以访问类的私有变量?

时间:2015-08-24 06:41:10

标签: java variables actionlistener

您好我是Java的新手,我有以下问题(我已经搜索了论坛,但我还不了解):

为什么可以从actionlistener访问私有类变量,如:

public class Test{
private int x;

   Test(){
     init();
   }

....

   public void init(){

....
   Button button_1 = new Button("buttonTest");
        button_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                x++;
            }
        });

   }

}

为什么我不能将前面的代码剪断(创建按钮+ actionlistener)到构造中而没有错误(“x无法解析”)?

问候

2 个答案:

答案 0 :(得分:2)

而不是写x++;尝试使用Test.this.x++;

问题是您正在尝试从匿名内部类访问数据成员。如果您编写x++;,那么它将引用actionPerformed(ActionEvent arg0)方法中不存在的局部变量。因此,要引用类的数据成员,您必须使用this,但由于您使用的是匿名内部类,因此您必须告诉类名,因此它变为Test.this.x++;

答案 1 :(得分:0)

这应解决它:

public void actionPerformed(ActionEvent arg0) {
                    Test.this.x++;
                }