final关键字的工作原理?

  • 回答 (2)
  • 关注 (0)
  • 查看 (280)

在Java中,我们使用final关键字和变量来指定它的值不被改变。但是我发现你可以改变类的构造函数/方法中的值。再次,如果变量是static那么这是一个编译错误。

这里是代码:

import java.util.ArrayList;
import java.util.List;
class Test {
  private final List foo;
  public Test()
  {
      foo = new ArrayList();
      foo.add("foo"); // Modification-1
  }
  public static void main(String[] args) 
  {
      Test t = new Test();
      t.foo.add("bar"); // Modification-2
      System.out.println("print - " + t.foo);
  }
}

上面的代码工作正常,没有错误。

现在改变变量为static:

private static final List foo;
jkr94756jkr94756提问于
秋之夕颜清念念不忘,必有回响回答于

Final关键字有多种使用方式:

  • 最后一堂课不能分类。
  • 最后的方法不能被子类覆盖
  • 最终的变量只能被初始化一次

其他用法:

  • 当一个匿名内部类被定义在一个方法体内时,所有在该方法范围内声明为final的变量都可以从内部类中访问

一个静态的类变量将从JVM的开始存在,并且应该在类中初始化。如果你这样做,错误信息将不会出现。

嗨喽你好摩羯座回答于

你总是被允许初始化一个final变量。编译器确保你只能做一次。

请注意,调用存储在final变量中的对象的方法与其语义无关final。换句话说:final只是关于引用本身,而不是引用对象的内容。

Java没有对象不可变性的概念; 这是通过精心设计的对象来实现的,是一个远非平凡的努力。

扫码关注云+社区

领取腾讯云代金券