Java中的final关键字
小明 Lv6

🍂 唯一不变的是final

概念

final 是 Java 中的一个关键字,可以用于修饰类、方法和变量。
当一个类被声明为 final 时,它意味着该类不能被继承。
当一个方法被声明为 final 时,它意味着该方法不能被重写。
当一个变量被声明为 final 时,它意味着该变量的值不能被修改。

final饰修类

举例String类就是final修饰的,所以不能被继承,进而重写其方法

如果声明一个类为final类, 那么这个类就是最终类,不能被继承

1
2
3
4
5
public final class ParentClass {
public void happy() {
System.out.println("高兴");
}
}

当写一个类去继承它的时候

1
2
3
public class ChildClass extends ParentClass{

}

就会报错错误;

注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写。

final类中的成员变量可以根据需要设为final,但是final类中的所有成员方法都会被隐式地指定为final方法。 在使用final修饰类的时候,一定要谨慎选择,除非这个类以后不会用来继承或者出于安全考虑,尽量不要将类设计为final类。

final修饰方法

当final用来修饰一个方法的时候,这个方法就是最终方法,那么很明显就是说不能被覆盖重写。

1
2
3
4
5
6
7
8
9
10
11
12
public class ParentClass {

public void happy() {
System.out.println("高兴");
}

//用final关键字修饰的方法
protected final void play(){
System.out.println("开心的玩耍");
}

}

我们在继承类中去看下 play()方法是不可以被override的,也就是是报错,说明 final修饰的方法,是一个最终方法,不能被子类去覆盖重写。

final修饰变量

final成员变量表示常量,只能被赋值一次,赋值后值不再改变。

  • 当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;
  • 当final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。
    final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。
1
2
3
4
5
6
7
8
class Animal {
private final int count = 0;
public Animal() {
count = 1; //报错
final Object object = new Object();
object = new Object(); //报错
}
}
 评论