java的匿名内部类只能访问局部final变量

无意间发现匿名内部类访问局部变量必须为final,而成员变量不需要,思考后理解,在此记录:
* 访问局部变量必须为final的原因是因为局部变量的生命周期的原因,(如果在一个线程类访问一个方法的
* 局部变量,那么当该方法结束之后,局部变量就不存在了,而此时线程还没结束,那么还得继续访问这个局部变量
* 如何解决? java采用的是值的复制来解决,在匿名内部类中,把局部变量复制一份并保存,那么匿名内部类中的
* 变量和方法中的局部变量就不是同一个变量,只是值相同罢了,那么当匿名内部类修改这个变量时,就会出现
* 修改不同步的现象,因此java用final来解决此问题,让其基本类型不能更改值,引用类型不能更改引用
* 从而解决了修改不一致的问题.
*


* 综上所述,局部变量要定义为final的关键原因是因为生命周期不一致导致在匿名内部类中对值进行复制,
* 为了避免修改不一致,所以必须定义为final,
* 而成员变量生命周期较长,不存在生命周期不一致的现象,所以也就可以解释为什么无需final!!!

猜你喜欢

转载自blog.csdn.net/djh2717/article/details/81029521