【发布时间】:2012-06-01 03:27:17
【问题描述】:
我从小就知道final 是一个关键字,当它应用于变量时,不能将变量重新分配给其他东西。 “如果一个变量是最终的,那么它就是一个常数”总结了很多,虽然我不喜欢这个定义,但这可能是记住这个概念的好方法。我只是更愿意说you cannot change the value of the variable(无论“价值”是什么意思)。
我的生活很快乐,但有一天我更深入地了解了method local inner classes...
在方法中定义的内部类不能访问在方法本身中定义的变量。为什么?因为虽然类存在于堆中并且它可能在方法完成后仍然存在(类的有效引用可能被传递并存储在其他地方),但这些变量存在于堆栈中,并且当方法返回时它们会消失。我们不希望有一个内部类试图访问一个以后不再存在的变量,因为那样世界就会结束。
完美。这说得通。优秀!然后:除非您将这些变量声明为 final .....然后您的类可以访问它们并且编译器不会将您送入地狱...
WHY???我的意思是,这是什么魔法? final 到底做了什么,为什么我不得不等待谈论方法本地内部类来解决这个问题?假设final变量不管定义在哪里都存储在Heap中,除了让方法局部内部类快乐的概念,还有其他的应用吗?
【问题讨论】:
-
你读过java final 局部变量存储在哪里:stackoverflow.com/questions/1945663/…
标签: java inner-classes final