class singlen {
private static singlen obj=new singlen();
public static int count1;
public static int count2=0;
private singlen(){
count1++;
count2++;
}
public static singlen getInstence(){
return obj;
}
}
class dd{
public static void main(String[] args){
singlen s=singlen.getInstence();
System.out.println("count1=="+s.count1);
System.out.println("count2=="+s.count2);
}
}
上边代码将输出:
count1==1
count2==0
首先初始化静态变量,再执行构造函数,怎么会奇怪的输出
楼上说的很正确。
[code="java"]
private static singlen obj=new singlen();
[/code]
构造方法已经执行了。
然而你要注意的是,变量的定义和赋值并不是同步的。
变量的定义在方法里都能访问的到,但是赋值要看所在的位置。
如果你改成
[code="java"]
public static int count1;
public static int count2=0;
private static singlen obj=new singlen();
[/code]
结果将是你想要的。
可以看我这个问题
[url=http://www.iteye.com/problems/55383]static编译的问题[/url]
构造函数的执行被这句代码提前了
[code="java"]private static singlen obj=new singlen(); [/code]