变量“有效最终”是什么意思?

时间:2014-01-31 06:10:01

标签: java final anonymous-class

匿名类的documentation说明

  

匿名类无法访问其封闭范围内的局部变量   未被宣布为最终或有效最终的。

我不明白变量是“有效最终”是什么意思。有人可以提供一个例子来帮助我理解这意味着什么吗?

2 个答案:

答案 0 :(得分:23)

有效的最终意味着它在获得初始值后永远不会改变。

一个简单的例子:

public void myMethod() {
    int a = 1;
    System.out.println("My effectively final variable has value: " + a);
}

此处,a未声明为最终版,但它被视为有效最终,因为它永远不会更改。

从Java 8开始,可以通过以下方式使用它:

public void myMethod() {
    int a = 1;
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("My effectively final variable has value: " + a);
        }
    };
}

在Java 7及更早版本中,必须声明a final才能在这样的本地类中使用,但是从Java 8开始,它实际上是最终的。

答案 1 :(得分:5)

根据docs

在初始化后永远不会更改其值的变量或参数是effectively final