final修饰的成员变量只能在对象创建之前或者通过构造器赋值。
常用的赋值途径:
- 默认初始化
- 显式赋值
- 代码块赋值
- 构造器赋值
- 通过 .属性或 .方法赋值
但是,由于final修饰的成员变量在底层设计时,不允许默认初始化赋值,所以,赋值方法只剩下 :①显式赋值、②代码块赋值和③构造器赋值。
具体为什么不允许默认初始化,转见Java final修饰的成员变量有默认值吗?
我们可以再延伸一下,假如是static final修饰的成员变量
static final修饰的成员变量赋值时机:
我们知道static修饰的话,那说明与对象无关,即构造器赋值不再起作用,且由于非静态代码块是在实例化时起作用。所以你那赋值方法只剩下
①显式赋值 ②静态代码块赋值