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

Java 为什么ActionListener可以访问类的私有变量?,java,variables,actionlistener,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(

嗨,我是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无法解析”)


问候语

而不是写
x++Test.this.x++

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

这应该可以解决这个问题:

public void actionPerformed(ActionEvent arg0) {
                    Test.this.x++;
                }
为什么可以像这样从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
类位于您的
Test
类中。因此,
actionListener
访问类内的
private
atribute表单,因此private工作正常。如果您想防止这种情况,请为您的
actionListener

创建一个单独的文件,我们不知道您以前的代码片段是什么。如果代码在构造函数中或在单独的方法中,这应该不会有什么区别,不应该有任何编译器错误。谢谢:)-您能向我解释一下吗?