您好我是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无法解析”)?
问候
答案 0 :(得分:2)
而不是写x++;
尝试使用Test.this.x++;
问题是您正在尝试从匿名内部类访问数据成员。如果您编写x++;
,那么它将引用actionPerformed(ActionEvent arg0)
方法中不存在的局部变量。因此,要引用类的数据成员,您必须使用this
,但由于您使用的是匿名内部类,因此您必须告诉类名,因此它变为Test.this.x++;
。
答案 1 :(得分:0)
这应解决它:
public void actionPerformed(ActionEvent arg0) {
Test.this.x++;
}