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

Ani*_*kur 17 java final anonymous-class

匿名类的文档说明

匿名类无法访问其封闭范围中未声明为final或者有效final的局部变量.

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

Kep*_*pil 23

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

一个简单的例子:

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

这里a没有宣布为final,但它被认为是有效的,因为它永远不会改变.

从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);
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

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


Kic*_*ick 5

根据文件:

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