final关键字——终结器
在Java中final被称为终结器,可以使用final来定义类、方法、属性。
一、final修饰类
- 当一个类被final修饰,表示该类不能拥有子类(该类不允许被继承)
- 一旦一个类被final修饰,该类的所有方法都会默认加上final(成员变量不会加final)
final class A {}//该类不能拥有子类
Java中的String类以及八大基本数据类型的包装类就是拿final修饰的。
二、final修饰方法
- 当一个类被final修饰,明确表示该方法不允许被覆写
- 当一个方法被private修饰后,相当于加了一个final关键字
class A {
public final void fun(){}//final修饰方法
}
三、final修饰属性
- final修饰普通数据类型的成员变量(最主要的用途)
- 被final修饰的成员变量必须在声明时初始化(构造块或构造方法中初始化),并且初始化后值无法被修改
class A {
public final int a = 5;//声明时初始化
public final int b;
public final int c;
public A() {
b = 10;//通过构造方法初始化
}
{
c = 20;//构造块中初始化
}
}
那么final与static final有什么区别呢?
public final int a = 5;
public static final int b = 10;
final修饰的变量,值不能改变,每个对象都有自己的final变量,并且在对象产生时初始化;
而static final是全局变量,所有对象共享此变量,并且在类加载的时候就初始化了,效率较高,使用的时候,通过类名调用。
四、final修饰引用数据类型的变量
final修饰引用数据类型值不能改变,对于引用数据类型的值就是地址,并不是说他的内容不能改变。
final Person p = new Preson( );
总结:
1、final关键字可以用于成员变量、本地变量、方法以及类。
2、 final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。
3、 不能对final变量再次赋值。
4、 final方法不能被重写。
5、 final类不能被继承。