1、被final修饰的类不可以被继承
2、被final修饰的方法不可以被重写
3、被final修饰的变量初始化后不可变;若变量为引用变量,则引用不可变,引用指向的内容可变
4、被final修饰的常量,在编译阶段(static final 修饰的为编译期常量)会存放常量池中
5、在构造器内对final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序
eg:
public Write(){
final int j=1;//构造器内对final域的写入
}
write=new Write();//被构造对象的引用赋值给一个引用变量
如果允许重排序,final域还没有初始化,就已经赋值了,此时j的值为默认值(0),会产生错误的结果
6、初次读一个包含final域对象的引用,与随后初次读这个final域,这两个操作之间不能重排序
eg:
public Read(){
final int j=1;
}
read=new Read();//初次读一个包含final域对象的引用
read.j;//初次读这个final域
如果允许重排序,此时对象还没有构造,read==null,可能会报空指针异常,并且final域也没有初始化,会读到错误的值