Java 关键字之 final

欢迎学习 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 关键字的。

Tags: