为什么局部变量最后是方法参数还是内部方法。
private void add(final int a , final int b) {
final int c = 0;
}
请有人澄清。我正在搜索很多,但我找不到确切的答案。
答案 0 :(得分:6)
一个原因是它可以防止你无意中改变它们。这是一个很好的做法,因为它会遇到一些难以置信的编码错误。
第二个原因是,如果您正在使用内部类,则从外部作用域引用的变量需要声明为final
。有关详细信息,请参阅this SO answer。
final
的问题在于它在不同的上下文中意味着不同的东西。有关详细信息,请参阅this discussion。
答案 1 :(得分:0)
final意味着无法更改这些值。尝试为任何最终变量设置另一个值将导致编译时错误
答案 2 :(得分:0)
功能样式使用最终变量。这是一个原因。另一个是关闭。
最终变量是唯一可以在闭包中使用的变量。所以如果你想做这样的事情:
void myMethod(int val) {
MyClass cls = new MyClass() {
@override
void doAction() {
callMethod(val); // use the val argument in the anonymous class - closure!
}
};
useClass(cls);
}
这不会编译,因为编译器要求val
是最终的。所以将方法签名更改为
void myMethod(final int val)
将解决问题。本地最终变量也可以这样做:
void myMethod(int val) {
final int val0;
// now use val0 in the anonymous class