- final修饰基本类型常量,不可以第二次赋值;修饰引用类型常量,不可以第二次修改指向(但是不能保证引用类型的值不被修改)
final int[] a = {1, 2, 3, 4};
a[0] = 6;
int[] b = {0};
a = b;
- final修饰的类不可以被继承,需要注意:final类中所有的成员方法都会隐式的定义为final方法。
final class A {
}
class B extends A {
}
- final修饰的方法不可以被重写,例如:Object类中的getClass( )方法。
- final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。
class A {
public final void print() {
System.out.println("A");
}
}
class B extends A {
public void print() {
System.out.println("B");
}
}
- final保障多线程下线程的可见性,防止指令重排序
- 在多线程运行环境中,如果一个对象在初始化期间有可能被其他线程访问,那么它就是不安全的,final关键字防止了指令重排,保证对象创建完成之后才会被其他线程调用。