为什么内部类中访问局部变量,局部变量需要final修饰
【为什么内部类中访问局部变量,局部变量需要final修饰】java内部类
- 原因是:因为局部变量和匿名内部类的生命周期不同。
- 匿名内部类是创建后是存储在堆中的
- 而方法中的局部变量是存储在Java栈中,当方法执行完毕后,就进行退栈,同时局部变量也会消失。
- 为了解决这个问题编译器为自动地帮我们在匿名内部类中创建了一个局部变量的备份,也就是说即使方法执结束,匿名内部类中还有一个备份,自然就不怕找不到了。
- 但是问题又来了。如果局部变量中的a不停的在变化。那么岂不是也要让备份的a变量无时无刻的变化。为了保持局部变量与匿名内部类中备份域保持一致。编译器不得不规定死这些局部域必须是常量,一旦赋值不能再发生变化了。所以为什么匿名内部类应用外部方法的域必须是常量域的原因所在了。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 为什么你的路演总会超时()
- 财商智慧课(六)
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 吃了早餐,反而容易饿(为什么?)
- 你有婚内虐待行为吗()
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- ?【段子图】内裤为啥湿呢(想想好邪恶啊...)
- 放下心中的偶像包袱吧
- 为什么越花钱的人越有钱,越舍不得花钱的人却越穷()