Mar*_*ace 4 java final inner-classes
我从小就知道这final是一个关键字,当应用于变量时,不能将变量重新分配给其他东西."如果一个变量是最终的那么它就是一个常数"总结了许多,虽然我不是那个定义的粉丝,但它可能是一个很好的方法来记住这个概念.我只想说you cannot change the value of the variable(无论"价值"意味着什么).
我的生活很幸福,但有一天我深入了解method local inner classes......
方法内定义的内部类不能访问方法本身定义的变量.为什么?因为当类存在于Heap中并且它可能在方法完成后保持存在(类的有效引用可能被传递并存储在其他地方),这些变量存在于堆栈中并且在方法返回时它们会死亡.我们不希望内部类在以后尝试访问不再存在的变量,因为那时世界将会结束.
完善.这说得通.优秀!然后:除非你声明那些变量最终.....然后你的类可以访问它们,编译器不会把你送到地狱......
WHY???我的意思是,这是什么样的巫术?最终究竟做了什么以及为什么我不得不等待谈论方法本地内部类来解决这个问题?假设最终变量存储在堆中,无论它们在何处定义,除了使方法本地内部类快乐的概念之外,还有其他任何应用吗?
引用自" 最终关键词的最后一句话 ":
这种限制的原因[本地类只能引用声明为final的局部变量和参数.]如果我们对如何实现本地类有所了解,这一点就变得很明显了.匿名本地类可以使用局部变量,因为编译器会自动为类提供一个私有实例字段来保存类使用的每个局部变量的副本.编译器还为每个构造函数添加隐藏参数,以初始化这些自动创建的私有字段.因此,本地类实际上并不访问本地变量,而只是它们自己的私有副本.这种方法可以正常工作的唯一方法是将局部变量声明为final,以确保它们不会改变.有了这种保证,本地类就可以确保其变量的内部副本能够准确地反映实际的局部变量.