如题,在构造方法中定义了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();
}
}

解决方案 »

  1.   

    final的意思就是最终
    final定义的变量,其初始值就是最终值,不能再重新赋值
    所以final才能用来定义常量
      

  2.   

    来晚了 = =  看来楼主不了解final的意思呀。。肯定是IDE说xxx里面不能使用非final的变量,然后&^%^&!@*#*
      

  3.   

    a = 3; /*此处抱错!*/
    如果没有final,那么匿名类方法就不能使用a,因为a是个临时局部变量,也就是说方法不调用,就无法确定a的内存地址,那么匿名类无法把a翻译成字节码,所以用final,使a常量化,这样同时又导致了匿名类的方法里不能修改a的值了,只能读取