final关键字
final可以用于修饰类、方法和变量。
修饰类:使用final修饰的类是最终类,即不能被继承。final类通常用于安全或者性能方面的考虑,防止其他类继承并修改其行为。
修饰方法:使用final修饰的方法是最终方法,即不能被子类重写。final方法通常用于确保方法的行为不会被子类修改,或者提高方法的执行效率。
修饰变量:使用final修饰的变量是最终变量,即不能被重新赋值。final变量通常用于表示常量,一旦赋值后就不能再修改。final变量必须在声明时或者构造方法中进行初始化。
public class Test {
public static void main(String[] args) {
E e = new E();
}
}
//如果我们要求 A 类不能被其他类继承
//可以使用 final 修饰 A 类
final class A { }
//class B extends A {}
class C {
//如果我们要求 hi 不能被子类重写
//可以使用 final 修饰 hi 方法
public final void hi() {}
}
//当不希望类的的某个属性的值被修改,可以用 final 修饰
class E {
public final double TAX_RATE = 0.08;//常量
}
//当不希望某个局部变量被修改,可以使用 final 修饰
class F {
public void cry() {
//这时,NUM 也称为 局部常量
final double NUM = 0.01;
}
}
注意事项
1)final修饰的属性又叫常量,一帮用全大写字母来命名。
2)final修饰的属性在定义时必须赋初值,并且以后不能修改,赋值可以加在如下位置之一:
- 定义时
public final double TAX_RATE=0.08;
- 在构造器中
public final double TAX_RATE2 ;
public AA() { //构造器中赋值
TAX_RATE2 = 1.1;
}
- 在代码块中
public final double TAX_RATE3 ;
{//在代码块赋值
TAX_RATE3 = 8.8;
}
3)如果final修饰的属性是静态的,则初始化的位置只能是定义时或静态代码块中,不能在构造器中赋值。
4)final类不能继承,但是可以实例化对象。
5)如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承。
6)如果一个类已经是final类了,就没有必要再将方法修饰成final方法。
7)final不能修饰构造方法。
8)包装类(Integer,Double,Float,Boolean等)都是final类,String也是final类。