初学java GUI,想用swt写个程序,对里面的事件响应不是很理解,如下:
button.addMouseListener(new MouseAdapter() {
public void mouseDown(MouseEvent e) {
   if(btnRepeatEvent.getSelection())
引用界面中的一些输入,调用别的类做一些事情………… 
          }
}
因为这是个内部类,好像只能引用声明为final的对象,难道我要把与之相关的所有变量全声明为final吗……如果这些变量是需要改变的怎么办?大家平常编程的时候是怎么做的?

解决方案 »

  1.   

    局部变量需要加final,成员变量不是
      

  2.   

    final只是不能改变引用而已,比如
    final StringBuilder builder = new StringBuilder();可以
    builder.append(...);
    不可以在别处重新
    builder = new StringBuilder();
      

  3.   

    其实和GUI无关设计到匿名内部类时,要引用该匿名内部类外面的局部变量时,必须声明为final.否则会有逻辑错误假设不声明为final局部变量,即该变量可以在后续操作中更改int a = 0;//
    Thread th = new Thread(){
       public void run(){
          System.out.println("a="+a);
       }
    };
    a=2;//如果不声明为final.则后续操作可以更改此变量的值
    th.start();
    //那么在线程执行时,你觉得该输出0呢还是2呢为了避免上面情况的出现,对于需要在匿名类里引用的局部变量,必须声明为final