final关键字我们并不陌生,但是final修饰的属性变量为什么必须在定义的时候或者构造函数中被初始化呢?
static final修饰的变量又为什么必须在定义的时候进行初始化呢?
首先要明白一点:
final修饰的变量表示赋值之后不能再进行更改,系统赋默认值也算赋值,因此系统也不会赋默认值。
如果不在定义的时候或者构造函数中对final变量进行赋值的话,则生成的对象中final变量的值是未知的(编译器也会直接报错),因此必须进行初始化。
如果用static final同时修饰变量的话,则变量必须在定义的时候进行初始化。因为static变量属于类,在调用构造函数之前就已经被系统赋予默认值了。
如果不在定义的时候初始化,那么既无法在构造函数中初始化,系统也不会赋默认值。则该变量被定义出来是毫无意义的。