日期:2014-05-20  浏览次数:20760 次

static final int i;若不赋值就出错,求内存解释

class{
static final int i ; //若不赋值就出错,求内存解释
}

------解决方案--------------------
一个变量有static说明它在不new任何对象的时候就能使用。

一个变量有final说明一经赋值就不能改变,还意味着没有自动的默认值。

所以staitc+final就意味着,必须在静态变量可使用前就进行手动赋值,这样的机会只有两处:

一个是变量定义处,一个是静态初始化器。

------解决方案--------------------
定义为final的变量必须要初始化,或者在定义的同时初始化,或者在构造方法中初始化。而且其值只能被初始化一次,初始化后就不能被改变了。

定义为static的变量是属于类的,在类被加载的时候,就会为其初始化,如果没有指定初始值,那么int型的就被默认初始化为0。

试想,如果定义处不初始化的话,那必须在构造方法为其初始化,而执行构造方法之前static的变量已经有值了,再在构造方法中指定的话,final型的变量等于第二次赋值了,这是不允许的。所以static final 型的变量,只有在定义处初始化。