final 修饰类
- 如果一个类被final修饰,说明这个类为最终类,不可能有子类。
- abstract和final不能同时修饰一个类
- 类名修饰符之间的排列顺序对类的性质没有任何影响
- 常见的final类:Math、String、Integer
final 修饰方法
- 用final修饰的成员方法,是功能和内部语句不能被更改的最终方法,即不能欸子类重新定义。它固定了这个方法所对应的具体操作,防止子类对父类关键方法错误的重定义,保证程序的安全性和正确性。
- 所有被private修饰的方法,以及所有在final类中的方法,都被认为是final的
final修饰变量
- final修饰的变量即为常量,如
final double PI = 3.14159;
- 常量可以在定义时赋值,也可以先定义后赋值,但是只能赋值一次
- 与属性变量不同的是,系统不会给常量赋默认的初始值,因此要保证引用常量之前给其赋值
- 若final修饰的是引用类型变量,那么该变量只能固定指向一个对象,不能被修改,但是可以修改对象的内容,示例如下:
public final class Test {
private int id;
public Test(){
id=1;
}
public void setId(int id){
this.id=id;
}
@Override
public String toString() {
return "Test{" +
"id=" + id +
'}';
}
public static void main(String[] args){
final Test Test = new Test();
System.out.println(Test.toString());
Test.setId(2);
System.out.println(Test.toString());
// Test = new Test(); 报错:cannot assign a value to final variable 'Test'
}
}
运行结果:
Test{id=1}
Test{id=2}