final关键词
需求
- 当不希望被继承时,使用final修饰【final class A{}】
- 当不希望父类的某个方法被子类重写时【访问修饰符 final 返回类型 方法名】
- 当不希望类的某个属性的值被修改,可以使用final修饰。【public final double TAX_RATE = 0.08】
- 当不希望某个局部变量被修改,可以使用final修饰【final double TAX_RATE = 0.08】
注意细节
- final修饰的属性又叫常量,用XX_XX_XX命名
- final修饰的属性在定义时,必须赋初值,并且不能再修改。可以在定义时、构造器中、代码块中赋值。
class A{
public final double TAX_RATE = 0.08;
public final double TAX_RATE;
public final double TAX_RATE;
//在构造器或代码块中赋初值也可以
public A(){
TAX_RATE = 0.1;
}
{
TAX_RATE = 1.1;
}
}
- 如果final修饰的属性是静态的,则初始化的位置只能是==定义时或静态代码块中(不能在构造器中赋值)==
- final类不能被继承,但可以实例化对象。
- 如果类不是final类,但还有final方法,他可以被继承,但不能被重写。
- 一般来说,如果一个类已经是final类,但他就没必要再修饰final方法。(已经不能被继承,更不会被重写)
- final不能修饰构造器。
- final往往和static搭配使用效率更高。
class B{
public final static int num = 1000;
//调用num属性时不会进行类加载
static{
}
}
- 包装类(Integer,Double,Float,BOOlean)和String都是final类。