LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 177|回复: 0

使用 final 的限制条件和局限性

[复制链接]
发表于 2024-1-14 00:41:37 | 显示全部楼层 |阅读模式

当声明一个 final 成员时,必须在构造函数退出前设置它的值。public class MyClass {
  private final int myField = 1;
  public MyClass() {
    ...
  }
}
或者public class MyClass {
  private final int myField;
  public MyClass() {
    ...
    myField = 1;
    ...
  }
}
将指向对象的成员声明为 final 只能将该引用设为不可变的,而非所指的对象。下面的方法仍然可以修改该 list。

private final List myList = new ArrayList();
myList.add("Hello");
声明为 final 可以保证如下操作不合法

myList = new ArrayList();
myList = someOtherList;
如果一个对象将会在多个线程中访问并且你并没有将其成员声明为 final,则必须提供其他方式保证线程安全。" 其他方式 " 可以包括声明成员为 volatile,使用 synchronized 或者显式 Lock 控制所有该成员的访问。

原文链接:https://pdai.tech/md/java/thread/java-thread-x-key-final.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表