java-final关键字

1 修饰变量

声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。

  • 对于基本类型,final 使数值不变;
  • 对于引用类型,final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的。
final int x = 1;
// x = 2;  // cannot assign value to final variable 'x'
final A y = new A();
y.a = 1;

2 修饰方法

  • 声明方法不能被子类重写。
  • private 方法隐式地被指定为 final,如果在子类中定义的方法和基类中的一个 private 方法签名相同,此时子类的方法不是重写基类方法,而是在子类中定义了一个新的方法。

3 修饰类

声明类不允许被继承

4 final域的内存语义

Java多线程(十六)---final域的内存语义

5 Java匿名内部类访问外部变量,为何需被标志为final?

  • 首先,内部类被编译的时候会生成一个单独的内部类的.class文件,这个文件并不与外部类在同一class文件中。
  • 内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。
  • 因为两者从外表看起来是同一个东西,实际上却不是这样,如果内部类改掉了这些参数的值也不可能影响到原参数,然而这样却失去了参数的一致性
  • 为了避免引用值发生改变,例如被外部类的方法修改等,而导致内部类得到的值不一致,于是用final来让该引用不可改变

参考

Java 基础
Java内部类的使用小结 形参为什么要用final

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

推荐阅读更多精彩内容

  • [toc] final关键字 - think in java 笔记 之前对于final关键字只是大概了解,平时编码...
    devliu_jianshu阅读 320评论 0 0
  • java中final关键字在平时开发中用到的不多也不算少,大多均用在修饰类的变量上,很少用final去对一个类进行...
    打不开的回忆阅读 1,099评论 1 50
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 前言 这里使用的是XUTILS网络请求哈,网络请求存储权限之类的就不写了 实现方式 1. 获取图片被保存的文件夹 ...
    crossroads阅读 1,866评论 0 1
  • tomcat 容器等级 servlet 的结构 servlet 使用流程 定义一个继承自 HttpServlet ...
    Laughingg阅读 368评论 0 0