变量“实际上是最终的”是什么意思?

2022-09-03 00:39:04

有关匿名类的文档声明

匿名类无法访问其封闭作用域中未声明为最终或有效最终的局部变量。

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


答案 1

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

一个简单的例子:

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和更早的版本中,必须声明能够在这样的本地类中使用,但是从Java 8开始,它足以有效地最终使用。afinal


答案 2

根据文档

如果变量或参数的值在初始化后永远不会更改,则该变量或参数是 。effectively final


推荐