6.4 final修饰符
成员变量是随类初始化
或对象初始化
而初始化的。
当类初始化时
,系统会为该类的类变量
分配内存,并分配默认值;
当创建对象时
,系统会为该对象的实例变量
分配内存,并分配默认值。
也就是说,当执行静态初始化块
时可以对类变量
赋初始值;
当执行普通初始化块
、构造器
时可对实例变量
赋初始值。
因此,成员变量的初始值可以在定义该变量时指定默认值,也可以在初始化块、构造器中指定初始值
final修饰的成员变量只能赋值一次
对于final
修饰的成员变量而言,一旦有了初始值,就不能被重新赋值,
必须显示初始化final成员变量
如果既没有在定义成员变量时指定初始值,也没有在初始化块、构造器中为成员变量指定初始值,那么这些成员变量的值将一直是系统默认分配的0
、\u0000
、 false
或null
,这些成员变量也就完全失去了存在的意义。
因此Java
语法规定:final
修饰的成员变量必须由程序员显式地指定初始值。
final修饰的成员变量的合法初始化位置
归纳起来, final
修饰的类变量、实例变量能指定初始值的地方如下。
- 类变量:必须在
静态初始化块中
指定初始值或声明该类变量时指定初始值
,而且只能在两个地方的其中之一
指定,不可以在其他地方指定初始值. - 实例变量:必须在
非静态初始化块
、声明该实例变量时指定初始值
或在构造器中指定初始值
,而且只能在三个地方的其中之一
指定。不可以在其他地方指定初始值.
实例
1 | public class FinalVariableTest |