#Java基础复习#
#参考文章:Java:final关键字的作用 (方法、变量、类)_java语言中在类定义时使用final关键字修饰是指这个类-CSDN博客#
一、理解含义
final是Java中一个保留的关键字,可以用于修饰变量、方法和类。
任何实体(变量,方法或类)一旦被声明final后,只能分配(赋值)一次。也就是说,
-
final修饰的变量不能用另一个值重新初始化
-
final方法不能被重写
-
final类不能被继承
编译器会检查代码,如果试图将final修饰的变量再次初始化的话,会报编译错误。
二、final变量、final方法、final类的特点
1.final修饰的变量
在Java中,我们无法更改final变量的值,final变量是只读的。例:
图示代码中的final变量b被初始化为5后再次被赋值时代码报错;
注意:在Java中声明final变量时建议使用大写形式。例如:final int MAX = 100;
(在了解final方法和final类之前,要掌握Java的继承方面的基础。)
2.final修饰的方法
在Java中,被final修饰的成员方法不能被子类重写(覆盖)。例如,
public class Peopel {
public final void eat(){
System.out.println("人可以吃东西");
}
public void work(){
System.out.println("人的任务是工作");
}
}
class student extends Peopel{
@Override
public void work() {
System.out.println("学生的任务是学习");
}
}
在上面的示例中,我们创建了一个People类其中包含普通成员方法work()和final方法eat()。在这里,Student类继承了People类,并且顺利的重写了work()方法;
而当我们试图覆盖People类中被final修饰的eat()方法时,会提示编译错误。
3.final修饰的类
在Java中,final类不能被另一个类继承。
例如图中People类被final修饰后,便不能再被Student类所继承;
三、final关键字的应用、优点和注意点
1.final关键字的优点:
JVM和Java应用都会对final变量进行缓存。提高了程序运行性能。
final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
2.应用于不可变类
创建不可变类要用到final关键字。不可变类是指它的对象一旦被创建了就不能被更改。例如String类型就是不可变类。不可变类有很多好处,譬如它们的对象是只读的,可以在多线程环境下安全的共享,不用额外的同步开销等等。
3.注意:
①final成员变量必须在声明的时候初始化或者在构造器中初始化,否则会报编译错误。
(没有在声明时初始化的final变量称为:blank final variable(空白final变量),它们必须在构造器中被初始化,或者调用this()初始化。否则,编译器会报错“final变量(变量名)需要进行初始化”。)
②对于集合、数组等类型的对象声明为final变量指的是引用的指向不能被更改,但可以向其中增加,删除或者改变其内容
③按照Java代码惯例,final变量就是常量,通常常量名要大写:private final int COUNT = 10;