1.final 修饰符的使用场景
- 当希望类不被继承时
// 希望A类不能被其他类继承 final class A {}
- 不希望父类的某个方法被子类进行覆盖或者重写
// 希望该方法不能被子类覆盖或者重写 final public void hi() { System.out.println("你好,ByteDance!"); }
- 不希望类的某个属性值被修改
// 不希望类的某个属性值被修改(常量) public final static double TAX_RATE = 0.007;
- 不希望某个局部变量被修改
final public void hi() { // 不希望某个局部变量被修改 final int TIMES = 10; System.out.println("你好,ByteDance!"); }
2.final 使用小贴士
赋初值的时机
对于final声明的属性可以在如下的位置进行赋值操作:
定义时初始化一个值
在构造器中
在代码块中
如果final修饰的属性是静态的,则初始化的位置只能是:(不能在构造器中赋值!)
定义时
静态代码块
final类的坑🕳
如果一个类已经是final类,就无需再将方法设置为final
final和static搭配使用效率更高,因为底层的编译器做了优化,不会导致类加载
final修饰的变量是基本类型:那么变量存储的数据值不能发生改变
final修饰的变量是引用类型,其地址值不能改变,但指向对象的内容可以改变