为什么局部变量是最终的?

时间:2012-03-28 15:03:12

标签: java

为什么局部变量最后是方法参数还是内部方法。

private void add(final int a , final int b) {
    final int c = 0;
}

请有人澄清。我正在搜索很多,但我找不到确切的答案。

3 个答案:

答案 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