final关键字详解
一、前言
最近学到JavaWeb后面发现以前的所学的基础知识都快忘光了,就以写博客的方式帮助我复习吧,本篇是对final关键字的总结,可能有错,望大佬指出。
二、final可以修饰类、方法、成员变量
- 当final修饰类的时候,说明该类不能被继承
- 当final修饰方法的时候,说明该方法不能被重写
- 当final修饰成员变量时,有两种情况
如果修饰的是基本类型,说明这个变量的所代表数值永不能变(不能重新赋值)!
如果修饰的是引用类型,该变量所的引用不能变,但引用所代表的对象内容是可变的!
值得一说的是:并不是被final修饰的成员变量就一定是编译期常量了。比如说我们可以写出这样的代码:
private final int chang = new Randon().nextInt(20);
三、final修饰的类无法继承
首先创建一个final关键字修饰的类
// 1、fianl修饰的类
final class FinalTest{
public void add(){
System.out.println("final类中的方法默认是final的");
}
}
再创建一个类用来继承被final修饰的类
发现报错了,确实如此,final修饰的类不能被继承
final类中的方法默认是final的。
据大佬说的,我也不知道咋证明
四、final方法不能被子类的方法覆盖,但可以被继承。
首先创建一个具有final修饰方法的普通类
class FinalTest02{
public final void stop(){
System.out.println("final修饰的方法可以被继承,但不可以被覆盖");
}
}
创建它的子类
class Test02 extends FinalTest02{
}
测试
Test02 test02 = new Test02();
test02.stop();
不难看出,被final修饰的方法可以被继承
但覆盖的话就会报错
五、final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
截图已证明