如题,在构造方法中定义了int fianl a,但是在监听器中却不能访问,求解?import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class Test {
// TODO Auto-generated method stub
public Test(){
final int a = 6;
Frame f = new Frame("test");
f.setSize(100, 100);
f.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent arg0) {
a = 3; /*此处抱错!*/
System.exit(0);
}
});
f.setVisible(true);
}
public static void main(String[] args) {
Test t = new Test();
}
}
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class Test {
// TODO Auto-generated method stub
public Test(){
final int a = 6;
Frame f = new Frame("test");
f.setSize(100, 100);
f.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent arg0) {
a = 3; /*此处抱错!*/
System.exit(0);
}
});
f.setVisible(true);
}
public static void main(String[] args) {
Test t = new Test();
}
}
final定义的变量,其初始值就是最终值,不能再重新赋值
所以final才能用来定义常量
如果没有final,那么匿名类方法就不能使用a,因为a是个临时局部变量,也就是说方法不调用,就无法确定a的内存地址,那么匿名类无法把a翻译成字节码,所以用final,使a常量化,这样同时又导致了匿名类的方法里不能修改a的值了,只能读取