final所修饰的变量,是只读量。
使用 final
关键字修饰一个变量时,该变量将成为一个常量,并且其值无法被修改。一旦被赋予初始值,final
变量的值在整个程序的执行过程中将保持不变。
以下是一个示例,展示了使用 final
修饰的变量的特性:
public class Main {
public static void main(String[] args) {
final int x = 10;
// x = 20; // 编译错误,final变量的值无法被修改
final double PI = 3.14;
// PI = 3.14159; // 编译错误,final变量的值无法被修改
final String message = "Hello";
// message = "Hi"; // 编译错误,final变量的值无法被修改
}
}
在上述代码中,我们定义了几个使用 final
关键字修饰的变量。一旦变量被声明为 final
,任何尝试修改其值的操作都会导致编译错误。
final
变量通常在需要创建不可变的常量或者在多线程环境下确保变量的线程安全性时使用。它们在程序中提供了一种保证,防止对变量的误操作或意外修改。
需要注意的是,final
变量仅保证其引用不可变,但不保证其引用的对象内容不可变。如果 final
变量引用的是一个可变对象,对象的内容仍然可以被修改。
定义final局部变量时,也必须且只能赋值一次
final
修饰的局部变量是指在方法、构造函数或代码块中定义的变量,且只在该作用域内有效。一旦使用 final
关键字将局部变量声明为常量,就需要在声明时或者稍后的语句中对其进行初始化,并且不能再修改其值。
以下是一个示例,演示了在定义 final
的局部变量时必须且只能赋值一次:
public class Main {
public static void main(String[] args) {
final int x; // 声明final局部变量
x = 10; // 初始化赋值
// x = 20; // 编译错误,final局部变量只能赋值一次
final double PI;
PI = 3.14;
// PI = 3.14159; // 编译错误,final局部变量只能赋值一次
final String message;
message = "Hello";
// message = "Hi"; // 编译错误,final局部变量只能赋值一次
}
}
在上述代码中,我们声明了几个 final
的局部变量,并对它们进行了初始化赋值。一旦局部变量被初始化,其值就不能再被修改。任何试图对 final
局部变量进行二次赋值的操作都会导致编译错误。
这种限制确保了 final
变量的不可变性,使得代码更加清晰、可读性更强,并帮助避免由于误操作而引发的 bug。