一个final 变量的值不能被改变,并且必须在一定的时刻赋值
声明为 final 的变量被标识为不可改变的,但该变量引用的对象属性却可以通过访问变量、或调用成员函数改变,当然这要求那些对象提供了“写”数据的接口(String类就没有提供“写”数据的接口,所以字符串的内容不可变)。声明为 final 的成员变量必须在构造对象的过程中完成初始化:
1)其定义处,也就是说在final变量定义时直接给其赋值;
2)或者是在初始化块中;
3)或者是在构造函数中;
4)这三个地方必须(且只能)选其一
5)在以后的引用中只能读取,不能修改。
声明为 final 的静态变量不必在构造函数中初始化,但必须(且只能)在静态上下文中初始化一次(定义时、静态区段均可)。
声明为 final 的局部变量必须(且只能)在使用前初始化一次,不使用的话可不必初始化。。比如可以定义以下变量(编译通过):
public static void main(String[] args)
{
final int a = 0;
final int b;
b = 0;
final int c;
}
声明为 final 的变量被标识为不可改变的,但该变量引用的对象属性却可以通过访问变量、或调用成员函数改变,当然这要求那些对象提供了“写”数据的接口(String类就没有提供“写”数据的接口,所以字符串的内容不可变)。声明为 final 的成员变量必须在构造对象的过程中完成初始化:
1)其定义处,也就是说在final变量定义时直接给其赋值;
2)或者是在初始化块中;
3)或者是在构造函数中;
4)这三个地方必须(且只能)选其一
5)在以后的引用中只能读取,不能修改。
声明为 final 的静态变量不必在构造函数中初始化,但必须(且只能)在静态上下文中初始化一次(定义时、静态区段均可)。
声明为 final 的局部变量必须(且只能)在使用前初始化一次,不使用的话可不必初始化。。比如可以定义以下变量(编译通过):
public static void main(String[] args)
{
final int a = 0;
final int b;
b = 0;
final int c;
}