当前位置: 首页 > 面试题库 >

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

聂涛
2023-03-14
问题内容

6年前关闭。

有关匿名类的文档说明

匿名类无法在其封闭范围内访问未声明为final或有效地为final的局部变量。

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


问题答案:

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

一个简单的例子:

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

在这里,a并没有声明为final,但是由于它从未更改,因此实际上被认为是 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);
        }
    };
}

在Java 7和更早版本中,a必须声明final可以在这样的本地类中使用,但是从Java 8开始,足以有效地成为最终语言



 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 为什么在匿名类中只能访问最终变量? (15个答案) 为什么实例变量“忽略Lambda表达式中使用的变量必须是最终变量或实际上是最终变量”警告[重复] (2个答案) Lambdas:局部变量不需要最终变量,实例变量不需要 (10个答案) 2年前关闭。 当我编写此代码时,我收到一个编译时错误,该错误是: “ lambda中的变量必须是final或有效的fin

  • 问题内容: 我读了这个问题不可变对象,并留下了关于不可变对象,并最终场一个问题: 为什么我们需要不可变类中的实例变量为最终变量? 例如,考虑以下不可变的类: 如果在上面的代码中没有set方法,而实例变量仅在构造函数中设置,为什么要求将实例变量声明为final? 问题答案: 有没有 要求 这样做的变量。但是,当您确实明确打算永远不更改变量时,通常这样做是一种好习惯,因为这不仅可以使变量避免错别字或其

  • 在Java8中,Java设计者提出了一个有效的final变量的概念,即一个如果被“final”追加就不会给编译器带来错误的变量。我的问题是,这个新提出的“有效最终”概念比经典的“最终”提供了什么?作为一名Java开发人员,我实际上得到了什么好处?

  • 问题内容: 通过使ArrayList(或其他Collection)成为最终形式,我们可以获得哪些优点/缺点?我仍然可以将新元素添加到ArrayList中,删除元素并进行更新。但是,什么才是最终的效果呢? 问题答案: 但是,什么才是最终的效果呢? 这意味着您无法将变量重新绑定为指向其他 集合实例 : 出于风格考虑,我声明了大多数我不打算更改为的引用。 我仍然可以将新元素添加到ArrayList中,删

  • 我读到了这个关于不可变对象的问题,留下了一个关于不可变对象和final字段的问题: 为什么我们需要不可变类中的实例变量成为最终变量? 例如,考虑这个不可变类: 如果在上面的代码中没有设置方法,并且实例变量只在构造函数中设置,那么为什么需要将实例变量声明为final?