final 关键字相信大家都不会陌生,在项目中常常会看见它的身影。
今天我们就来了解 final 常用的三种修饰场景:数据、方法和类。
一、final 修饰数据
1.final 修饰 String 和其他基本类型数据
数据被定义好之后,是不可被改变的。
public static final String COLOR_BUlE = "blue";
public static final int NUMBER = 12;
final 修饰数据时,通常会与 public static 关键字联用来定义全局常量,表示此数据在程序只仅此一份,常量命名规则为:单词全大写,若有多个单词,中间用下划线隔开。
2.final 修饰对象
被final修饰的对象,不可再变更其引用,但对象内的值是可以进行修改的。
public class Car {
private String name;
private String color;
public Car(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
'}';
}
}
public static final Car car = new Car("cc", "white");
public static void main(String[] args) {
System.out.println(car.toString());
car.setColor("green");
car.setName("zz");
System.out.println(car.toString());
}
Car{name='cc', color='white'}
Car{name='zz', color='green'}
3.空白 final
所谓空白 final 指被声明为 final 但又未给定初值的域,强制要求在构造方法中或定义时对 final 数据进行赋值,它可确保数据被调用前得到初始化。空白 final 提供了更大的灵活性,使得 final 修饰的数据可以动态变化。
public class FinalDemo {
private final Car car;
public FinalDemo(Car car) {
this.car = car;
}
}
4.final 修饰方法参数
被修饰的方法参数变为只读对象,无法修改其引用。
二、final 修饰方法
final 修饰的方法无法被覆盖重写,可以防止继承类修改它的含义。
public class Game {
private String name;
public Game(String name) {
this.name = name;
}
public final void startGame() {
System.out.println("game start");
}
}
小知识:所有的 private 方法都隐式地指定为 final 的。由于无法读取 private 方法,所以也就无法覆盖它。
三、final 修饰类
final 修饰的类将不允许任何的类进行继承,表明该类的设计永远不需要任何改动,或者是出于安全方面的考量。
public final class Animal {
private String name;
}
final 使用建议:
在使用 final 修饰方法时,可能会妨碍到其他程序员在项目中通过继承来复用你的方法,故在定义 final 方法前,还请认真考虑此方法是否完全不存在复用的可能性。在使用 final 修饰类前,更需慎重考虑,这会导致类中的所有成员和方法都将无法被其他任何类复用,请确认是否真的需要此种效果。
本次分享至此结束,希望本文对你有所帮助,若能点亮下方的点赞按钮,在下感激不尽,谢谢您的【精神支持】。
若有任何疑问,也欢迎与我交流,若存在不足之处,也欢迎各位指正!