当声明一个 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
|