Java中final关键字的使用
1. final数据
final作为数据的修饰时类似于C++中const的使用方法,指明一个数据不可修改。包括定义编译时常量,和运行时被初始化但不希望改变的值。
class Value{
public static final PI = 3.14; //编译时常量
private final int[] a = {1,2,3,4,5}; //运行时常量
}
空白final
Java允许定义为未定初值但被定义为final的域,但要求在使用前必须初始化;为此一个域的final变量可以做到根据对象的不同而不同。
class BlankFinal {
private final int i;
public BlankFinal() {
i = 1; //对空白final初始化
}
public BlankFinal(int x) {
i = x; //对空白final初始化
}
}
2. final参数
final用于修饰函数中的参数时,无法在方法中更改参数所指向的对象。
class Gizmo {
puclic void spin() {
}
}
public class FinalArgument {
void with(final Gizmo g) {
//g = new Gizmo(); --illegal
g.psin();
}
}
3. final方法
防止继承类修改定义。
类中所有的private方法都隐式指定为final的。
4. final类
表示该类不可以被继承。
class SmallBrain {}
final class Dinosaur {
int i = 7;
SmallBrain x = new SmallBrain();
void f() {}
}
//Dinosaur类不可以被继承
public class Jurassic {
public static void main(String[] args) {
Dinosaur n = new Dinosaur();
n.f();
}
}
由于final类中的所有方法不会被继承,所以final类中的所有方法隐式指定为final的。