1 概述
当我们编写 Java 代码是,对于关键字 static 和 final 常常心生疑惑,不知道它们之间的区别。本文将对二者进行一个简单的总结。
2 final 关键字
final 可以在变量、方法和类中使用。
2.1 变量
final 修饰变量时,意味着该变量用作常量,值应保持不变。
class Car {
public final int numberOfWheels = 4;
}
如果我们修改变量,编译器将会报错。
Car myCar = new Car();
myCar.numberOfWheels = 1;
>>> The final field Car.numberOfWheels cannot be assigned
2.2 方法
final 修饰的方法不能被任何子类重写,例如:
class Car {
public final int getNumberOfWheels() {
return 4;
}
}
class Sedan extends Car {
// This won't work because the method getWeight is final!
@Override
public double getNumberOfWheels() {
return 3;
}
}
2.3 类
final 修饰的类,可以防止被继承。
final class Pear {
private double weight;
private String color;
}
// This won't work because the Pear class is final!
class MagicalPear extends Pear {
}
3 static 关键字
在 Java 中,static 意味着字段或方法不会在对象的所有实例中被修改。比如:
class CurrencyConverter {
public static String EUR = "€";
public static double convertDollarsToEuros(double amountInDollars) {
double rate = 0.90;
return amountInDollars * rate;
}
}
我们不用声明类的实例,就可以调用convertDollarsToEuros
静态方法。
System.out.println(CurrencyConverter.convertDollarsToEuros(5.43D));
CurrencyConverter converter = new CurrencyConverter();
System.out.print(converter.convertDollarsToEuros(5.43D));
>>> 4.887
>>> 4.887
与 final 修饰的变量不同,可以在类的外部修改静态变量。