首先说下final关键字:必须要被初始化赋值,而且只能初始化一次.
Final关键字在并发中的原理是:禁止cpu指令集重新排序,来保证对象的安全发布,防止对象引用被其他线程在对象被完全构造完成前拿到并使用.
可以理解为防止被其他线程的对象所使用.
说白了,就是在并发的时候保证对象的安全。
如果你写的类不想被继承也可以使用它。
如果你写的方法不想被重写也可以使用它。
如果你写的属性不想被再次赋值也可以使用它。
public class TestFinal {
public static void main(String[] args) {
//显式赋值给常量
final int NUM = 10;
//NUM已经被初始化过了,不能被修改
NUM = 22;//此处出错
}
}
//A类使用final修饰,则A不能被继承
final class A {
}
//B类继承A类出错
class B extends A {//此处出错
}
class C {
//method0()方法使用final修饰,则method0()方法不能被重写
public final void method0() {
}
}
class D extends C {
//重写method0()出错
public void method0() {//此处出错
}
}
class E {
//代码块给常量初始化
final String NATION;
{
NATION = "CHINA";
}
//构造器给常量赋初值
final int MONEY;
public E() {
MONEY = 100000000;
}
//全局常量,例如:Math.PI
static final int height = 173;
}