欢迎学习 Java 基础文章系列之 final 关键字

  • final 代表什么意思?

    • final 通常是指无法被改变或者不能被改变的,什么情况下不想被改变呢?

      • 不想改变可能有两种原因:设计或者效率。
  • 在Java中 final 关键字会在哪几个地方使用到?
    • 有三种地方使用:数据(成员变量、参数)、方法、类。

      • final 数据(成员变量、参数)

        常量以关键 final 表示,必须是基本数据类型。

        对于基本类型使数值恒定不变,而用于对象引用,使引用恒定不变,一旦引用被初始化指向一个对象,就无法改为指向另一个对象,然而对象其自身却是可以被修改的,Java 并未提供使任何对象恒定不变的途径(但是可以自己编写类已取得是对象恒定不变的效果),这一限制同样适用于数组,它也是对象。

        • 空白 final

          Java 允许生成:“空白 final”,即被声明为 final 但又未给定初始值的域。
        • final 参数

          Java中允许在参数列表中以声明的方式将参数指明为 final。无法在方法中更改参数引用所指向的对象。

          你可以读取参数,但却无法修改参数,这一特性主要用来向匿名类传递数据。
      • final 方法

        final 方法的考虑:出于对设计的考虑:确保在继承中使方法行为保持不变,并且不会被覆盖,或者出于效率(遭受劝退了)。

        该方法不会被重写(覆盖、覆写)。

        final 和 private 关键字

        类中所有的 private 方法都是隐式地指定为 final 的。由于无法使用 private 声明的方法,所以也就无法重写该方法。

        如果试图重写一个 private 方法(隐含式的 final),似乎是可行的,并且编译器也不会提示错误。

        “重写(覆盖、覆写)”只有在某方法是父类的接口(非interface)的一部分时才会出现。

        final修饰的方法在特定的访问权限下可以被继承。

        这是因为,方法是否被final修饰与方法的访问权限是两回事,没有任何关系,被final修饰的方法和未被final修饰的方法都可以自由的指定访问权限。

        我们有兴趣去谈论final关键字和访问权限关键字在修饰方法的过程的起到的作用,如下表(声明:final和访问权限是两个独立的概念,没有任何比较意义,所有本表仅方便读者理解,不可作为正统知识)
protect关键字 final关键字 private关键字
是否可以继承
是否可以重写
小结 private < final < protect (仅适用于方法)

正如上表所示,private实现了final方法不可重写的功能,并附加不可继承功能。(再次声明:final和访问权限是两个独立的概念,没有任何比较意义,所有上表仅方便读者理解,不可作为正统知识)可以对private方法添加final关键字,但是这种做法没有任何意义。

	* final 类

final 类的考虑:对该类的设计永不需要做任何变动,或者出于安全的考虑不希望它有子类。

该类不能被继承,final 类中所有的方法都是隐式指定为 final 关键字的。

最新文章

  1. div背景图片叠加
  2. 响应式web设计读书笔记
  3. MVC神韵---你想在哪解脱!(十三)
  4. Nginx - Rewrite Module
  5. Unity3D Mathf函数
  6. C语言中输入输出格式控制
  7. What is tradebit?
  8. Mahout推荐算法ItemBased
  9. Let&#39;s Encrypt(开源SSL证书管理工具)
  10. 关于submit与document.form1.submit();这2个提交的区别
  11. DDD理论学习系列(6)-- 实体
  12. rabbitmq的构架和原理(三)
  13. 【翻译】Ext JS 5的平板支持
  14. 如何解决PHP的高并发和大流量的问题
  15. GDB基础学习
  16. ubuntu upgrade
  17. Silverlight子窗口(ChildWindow)传递参数到父窗口演示
  18. [SQL123] Oracle SQL 统计一定时间间隔内的数据
  19. HDU 6406 Taotao Picks Apples 线段树维护
  20. Python之Subprocess模块

热门文章

  1. Python编码规范(养成好的编码习惯很重要)
  2. dbus中的数据类型
  3. FastAPI(54)- 详解 Request 请求对象
  4. ORACLE 坏块的模拟和查看
  5. SphereEx 公司成立,推动 Apache ShardingSphere 社区加速发展
  6. 1002 写出这个数 (20 分) java解题
  7. 2020.12.3--vj个人赛补题
  8. vj-E题Ehab and Path-etic MEXs
  9. C 函数指针 函数指针数组 转移表
  10. 【HMS Core 6.0全球上线】华为钥匙环服务,打造跨应用跨形态无缝登录体验