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