• 基本介绍
    1. final可以修饰 类、属性、方法、和局部变量
  • 使用场景
    1. (类)当不希望类被继承时,可以用final修饰
    2. (方法)当不希望父类的某个方法被子类覆盖/重写时,可以用final修饰
    3. (属性、值)当不希望类的某个属性的值被修改,可以用final修饰。
    4. (局部变量)当不希望某个局部变量被修改,可以用final修饰
  • final使用的细节
    1. final修饰的常量,规范写法大写,一般用XX_XX_XX命名

    2. final修饰的属性在定义时,必须赋初值,并且以后不能修改,赋值可以在

      1. 定义时
      2. 在构造器中
      3. 在代码块中
      class AA{
         
          //1.定义时
          public final double TAX_RATE=0.08;
          public final double TAX_RATE2;
          public final double TAX_RATE3;
          
          //2.在构造器中
          public AA(){
              TAX_RATE2=0.09;
          }
          // 3.在代码块中
          {
              TAX_RATE3=0.06;
          }       
      }
      
    3. 如果final修饰的属性是静态的,则初始化的位置只能是

      1. 定义时
      2. 在静态代码块
      3. 不能在构造器中赋值
      class BB{
          //如果final修饰的属性是金泰的,则初始化的位置只能是
          //1.定义时
          public final double TAX_RATE=0.08;
          public static final double TAX_RATE2;
          //2.静态代码块中
          static {
              TAX_RATE2=9.9;
          }
          
      }
      
    4. final 类不能被继承,但是可以实例化对象

    5. 如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承

    6. 一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法。

    7. final不能修饰构造方法(构造器)

    8. final和static往往搭配使用,效率更高,底层编译器做了优化处理。不会导致类的加载(就是静态代码块部分不被执行)

    9. 包装类(Integer,Double,Float,Boolean等都是final),String也是final类