static final int i;若不赋值就出错,求内存解释
在
class{
static final int i ; //若不赋值就出错,求内存解释
}
------解决方案--------------------一个变量有static说明它在不new任何对象的时候就能使用。
一个变量有final说明一经赋值就不能改变,还意味着没有自动的默认值。
所以staitc+final就意味着,必须在静态变量可使用前就进行手动赋值,这样的机会只有两处:
一个是变量定义处,一个是静态初始化器。
------解决方案--------------------定义为final的变量必须要初始化,或者在定义的同时初始化,或者在构造方法中初始化。而且其值只能被初始化一次,初始化后就不能被改变了。
定义为static的变量是属于类的,在类被加载的时候,就会为其初始化,如果没有指定初始值,那么int型的就被默认初始化为0。
试想,如果定义处不初始化的话,那必须在构造方法为其初始化,而执行构造方法之前static的变量已经有值了,再在构造方法中指定的话,final型的变量等于第二次赋值了,这是不允许的。所以static final 型的变量,只有在定义处初始化。