这是一个局部内部类访问局部变量的问题
你想一下如果局部变量不用final修饰,那么这个局部变量所在的方法执行完了之后就会被释放,同样这个局部变量也就没了,但是可能还有一个引用在指向局部内部类,这时候这个局部内部类中的方法所调用的局部变量已经不存在了,就会出错。
所以Java规定了这种局部变量必须用final修饰,用final修饰后会在局部内部类中维护一个相同的局部变量,这时候就不会出现这种错了