final 关键字

final 可以修饰类、属性、方法和局部变量。

1. 使用场景

  • 当不希望类被继承时,可以用final修饰。
  • 当不希望父类的某个方法被子类覆盖/重写时,可以用final关键字。
  • 当不希望类的某个属性值被修改,可以使用final修饰。
  • 当不希望某个局部变量被修改,可以使用final修饰。
 public final double rend = 0.08;  // 不能修改rend
 public final void hi(){} // 不能被重写
 public double getRend() {
        final double NUM = 0.01;
        NUm = 0.02;  // 不能修改局部变量
        return NUM;
    }

2.注意事项

  • final修饰的属性又叫常量,一般用 大写_大写 来 命名
  • final修饰的属性在定义时,必须赋初值,并且以后不能再修改

class BBB extends AAA{
    // 1. 定义时赋值
    public final double TAX_BATE = 0.08;
    public final double TAX_BATE2;
    public final double TAX_BATE3;
    public BBB(){
        // 2. 在构造器中赋值
        TAX_BATE2 = 1.1;
    }
    // 3. 代码块中赋值
    {
        TAX_BATE3 = 8.8;
    }
}
  • 如果final修饰的属性是静态的,则初始化的位置不能在构造器
public static final double TAX_BATE = 0.08;
    public static final double TAX_BATE2;
    static {
        TAX_BATE2 = 2.3;
    }
  • final类不能继承,但是可以实例化对象
  • 如果类不是final类,但是含有final方法,则改方法虽然不能重写,但是可以被继承
class DDD{
    public final void cal(){
        System.out.println("cal()方法");
    }
}
class EEE extends DDD{
    public void hi(){
        new EEE().cal();  // 
    }
}
  • 如果一个类已经是final类了,就没有必要再将方法修饰成final方法(被继承的机会都没有了)
  • final不能修饰构造方法
  • final 和 static往往搭配使用,效率更高,不会导致类的加载,底层编译器做了优化处理。
class FFF{
    // FFF.num 1000
    public final static int num = 1000;
    static {
        System.out.println("静态代码被执行");  // 执行 FFF.num 时不会执行此代码
    }
}
  • 包装类,String 是final类,不能被继承
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容