Java 为什么ActionListener可以访问类的私有变量?
嗨,我是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(
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
创建一个单独的文件,我们不知道您以前的代码片段是什么。如果代码在构造函数中或在单独的方法中,这应该不会有什么区别,不应该有任何编译器错误。谢谢:)-您能向我解释一下吗?