Java关键字之final详解

引入概念

  final是Java语言当中的一个关键字,final表示的是最终的、不可变的,也就是说final修饰的部分就有“不能变”的属性。final可以修饰的部分有变量、方法和类,下面我们来逐一讨论。

final修饰变量

  final关键字可以用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常,由final定义的变量为常量。
final修饰局部变量
  final关键字定义的变量必须在声明时对其进行赋值操作。final修饰的局部变量不能被二次赋值修改,只能赋值一次。
final修饰实例变量
  没有final修饰的普通的实例变量如果我们没有在声明时手动赋值的话,系统会赋默认值。而final修饰的实例变量,系统并不会赋默认值,这就要求程序员自己手动赋值,这个手动赋值可以直接在声明变量的时候在其后面赋值,也可以在该实例变量所在类的构造方法当中赋值。
  我们知道Java当中的变量分为基本数据类型的变量,当然这个变量也可以是对象的引用,如果final修饰的变量是一个“引用”会怎么样呢???
一旦一个对象引用被修饰为final后,它只能恒定指向一个对象,无法将其改变以指向另一个对象。即使被修饰为final的引用被赋值为null也算赋值一次。同时该空引用不会直接被垃圾回收器回收,只有在包含了该空引用的方法执行结束之后该引用才会被释放空间。
Tips: final修饰的实例变量一般加static修饰。
  我们知道一个被定义为final的对象引用只能指向唯一一个对象,不可以将它再指向其他对象,但是一个对象本身的值却是可以改变的,那么为了使一个常量真正做到不可更改,可以将常量声明为static final

final修饰方法

  定义为final的方法不能被重写。 将方法定义为final类型可以防止子类修改该类的定义与实现方式,同时定义为final的方法的执行效率要高于非final方法。在这里需要提出来的一点是,对于权限修饰符private,如果一个父类的某个方法被设置为private修饰,子类将无法访问该方法,自然无法覆盖该方法,所以一个被定义为private的方法隐式被指定为final类型,这样无须将一个定义为private的方法再定义为final类型。

final修饰类

  定义为final的类不能被继承。 如果希望一个类不允许任何类继承,并且不允许其他人对这个类进行任何改动,可以将这个类设置为final形式。由此而知,我们知道abstract关键字和final关键字是对立的,不能共存。
Tips: abstract修饰的类是专门用来被继承的,而final修饰的类不允许被继承。
  如果将某个类设置为final形式,则类中的所有方法都被隐式设置为final形式,但是final类中的成员变量可以被定义为final或非final形式。


看完本期博客我们需要思考的问题是:
final修饰的常量和static修饰的静态变量有什么异同呢???


Tips:解答如下:
相同点:常量和静态变量都存储在方法区,在类加载时初始化。
不同点:常量一般都是公开来使用的,常量值不可变,静态变量值可以改变。


以上内容均为个人学习的一点心得,其中的知识点若有错误请留言提醒,若有侵权内容提醒马上删除。

猜你喜欢

转载自blog.csdn.net/pf6668/article/details/108577341
今日推荐