在黑马论坛,一位同学这样提问:
----------------------------------------------------------------------------------------------------------------------------
两段代码,执行的时候会提示代码1中的a没有初始化,但是代码却能正常执行,为什么啊
代码1:
String a;
if(a==null)
代码2:
private static lanSingle s;
public static lanSingle getInstance(){
if(s==null)
s = new lanSingle();
return s;
}
--------------------------------------------------------------------------------------------------------------------------
这个问题问的很好,我原以为很简单,真的要回复的时候也蒙了一下。
1.String a;这句没有对变量进行初始化,所以会报错,这个我能理解。
2.代码2:private static lanSingle s; 这句也没有对s进行初始化为什么能用呢?确实很奇怪!经过反复研究,发现关键的问题出在前面的修饰符static上!
static变量,在类加载的时候就会对静态变量进行默认的初始化!
3.有图有真相