Java 编程/关键字/final
外观
final
是一个关键字。注意!它的含义取决于它用于类、方法还是变量。它必须放在变量类型或方法返回类型之前。建议将其放在访问修饰符之后以及static
关键字之后。
代码部分 1:关键字顺序。
private static final long serialVersionUID = -5437975414336623381L;
|
final
关键字只允许对变量进行一次赋值。也就是说,一旦变量被赋值,它的值就变成了只读。如果变量是基本类型,它的值将不再改变。如果它是一个对象,只有它的引用将不再改变。请记住,它的值仍然可以改变。
代码部分 2:禁止双重赋值。
final int a = 1;
a = 2;
|
|
|
一个 final 变量经常被用于通用常量,例如 pi
代码部分 4:Pi 常量。
static final double PI = 3.1415926;
|
final
关键字也可以用于方法参数
代码部分 5:final 方法参数。
public int method(final int inputInteger) {
int outputInteger = inputInteger + 1;
return outputInteger;
}
|
它对于使用副作用更新某些对象的方法很有用。此类方法修改了作为参数传递的对象的内容。方法调用者将收到对象更新。如果对象参数在方法中被重新赋值,这将失败。将更新另一个对象而不是。final 方法参数也可以用于保持代码整洁。
final
关键字类似于其他语言中的const
关键字和 C# 中的readonly
关键字。final 变量不能是volatile
。
final
关键字禁止创建子类。这是 Integer
或 String
类的案例。
代码清单 1:SealedClass.java
public final class SealedClass {
public static void main(String[] args) {
}
}
|
final 类不能是abstract
。final
关键字类似于 C# 中的sealed
关键字。
final
关键字禁止在子类中覆盖方法。如果类已经是 final,并且私有方法隐式地是final
,那么它就毫无用处。final 方法不能是abstract
。
代码清单 2:NoOverwriting.java
public class NoOverwriting {
public final void sealedMethod() {
}
}
|
final
关键字主要用于保证代码的良好使用。例如(非static
)方法,这允许编译器扩展方法(类似于内联函数),如果方法足够小。有时需要使用它。例如,嵌套类只能访问顶层类的成员,如果它们是 final。
- 另见 访问修饰符。