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

静态初始化问题
class Test
{
  int a;
  int b=a+1; 
}

此处eclipse怎么不报错啊,而且输出b的时候,竟然得到了1,意思就是a初始化为0了,可是b=a+1,是不合法的啊,没有被初始化啊,如果是static int a此会初始化啊
求解..................

------解决方案--------------------
为啥不合法?

int b=a+1; 明显就是在你实例化这个对象时才会执行的。


这两句话:
int a;
int b=a+1;

在new的时候执行顺序是:
int a; 内存分配
int b; 内存分配
a = 0; 初始化缺省赋值
b = a+1; 初始化赋值



------解决方案--------------------
成员变量时默认初始化的,你的int a; 就是成员变量
------解决方案--------------------
java貌似有缺省赋值,当你自定义一个变量没有赋初始值的时候,系统会默认给他赋一个的!
------解决方案--------------------
类变量和实例变量,系统都会自动初始化赋值,只有局部变量系统不会自动初始化而需要自己手动初始化
------解决方案--------------------
在你创建这个类的对象的时候,直接定义在类里面的成员变量(比如你的a和b都是成员变量而不是定义在方法里的局部变量)都会先于构造方法执行。
JVM会第一个初始成员变量,你没给a赋值,那它就初始为0。