Java中的“最终”关键字是如何工作的?(我仍然可以修改对象。)

Java中的“最终”关键字是如何工作的?(我仍然可以修改对象。)

在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;

现在这是一个编译错误。这怎么final真的有用吗?


斯蒂芬大帝
浏览 382回答 3
3回答

达令说

你总是被允许初始化 a final变量。编译器确保您只能执行一次。中存储的对象调用方法。final变量与final..换言之:final只涉及引用本身,而不是引用对象的内容。Java没有对象不可变的概念;这是通过仔细设计对象来实现的,这是一项非常重要的工作。

胡说叔叔

最终关键字有多种使用方式:决赛班级,等级不能被子类化。决赛方法不能被子类重写。决赛变量只能初始化一次其他用途:当在方法的主体中定义匿名内部类时,该方法范围内声明为Final的所有变量都可以从内部类中访问。一个静态类变量从JVM开始就存在,并且应该在类中初始化。如果这样做,将不会出现错误消息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java