这段代码奇怪的输出

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]