今天碰到个问题,循环绑定了click事件后,变量都是最后一个。
原来匿名内部类要用final来声明所在的方法的变量。
-----------------------------------
因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,
这说明内部类所处的位置和外部类中的方法处在同一个等级上,
外部类中的方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域只在这个方法内部有效。
因为编译的时候内部类和方法在同一级别上,所以方法中的变量或参数只有为final,内部类才可以引用。
final 关键字是什么意思
--------------------------------
就是用final 定义变量后 就不可在赋值。
例如 final int i=100。这个i的值永远都是100。
但是对于变量来说又不一样,只是标识这个引用不可被改变,
例如 final File f=new File("c:\\test.txt");
那么这个f一定是不能被改变的,如果f本身有方法修改其中的成员变量,
例如是否可读,是允许修改的。
形象的比喻:一个女子定义了一个final的老公,这个老公的职业和收入都是允许改变的,只是这个女人不会换老公而已。