JAVA中的final关键字

一、final用法

  • 一、当不希望类被继承时,可以用final来修饰
final class A{

}
class B extends A {

}
  • 二、当不希望父类的某个方法被子类覆盖/重写时
class A01{ 
    public final void hi(){}
}

class A02 extends A01{
    /*@Override
    public void hi() {
        super.hi();
    }*/
}
  • 三、当不希望类的某个属性被修改
class A01{
    public final double TAX_RATE = 0.08;
}
  • 四、当不希望某个局部变量被修改
class A01{
    public void print(){
        final double TAX_RATE = 0.01;
        // TAX_RATE = 0.9;
    }
}

二、细节和注意事项

1.final修饰的属性又叫常量,一般以XX_XX_XX命名

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

赋值可以在以下位置之一

  • 1)定义时

  • 2)构造器中

  • 3)代码块中

public final double TAXT_RAET1 = 0.08;

    public final double TAXT_RAET2;
    public FinalDetail01() {
        TAXT_RAET2 = 0.08;
    }

    public final double TAXT_RAET3;
    {
        TAXT_RAET3 = 0.08;
    }

3.如果final修饰的属性是静态的,则初始化的位置只能是
  1)定义时
  2)静态代码块不能在构造器中赋值

public static final double TAXT_RAET4 = 0.08;

    public static final double TAXT_RAET5;
    static {
        TAXT_RAET5 = 0.08;
    }

错误示范

因为要先执行静态代码再执行构造器 如果没有构造器则报错

public static final double TAXT_RAET6;
    public FinalDetail01() {
        TAXT_RAET6 = 0.08;
    }

4.final不能继承,但是可以实例化

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

class Five{
   public final void say(){
        System.out.println("hello");
    }
}
class Six extends Five{

}

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

final class F{
    public final void cry(){

    }

7.fianl不能修饰构造器

8.fianl和static往往搭配效率更高

public final static int n1 = 100;

9.包装类(String/Integer/Double/Float/Boolean等都是final类 不能被继承)

你可能感兴趣的:(#JAVA,java,开发语言)