final关键字的用法

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域也没有初始化,会读到错误的值

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容