小程序,疑问

来源:百度知道 编辑:UC知道 时间:2024/05/23 20:42:44
public class StaticTest
{
private static StaticTest st = new StaticTest();

private static int a;

private static int b = 0;

private StaticTest()
{
a ++;
b ++;
}

public static StaticTest getInstance()
{
return st;
}

public static void main(String[] args)
{
StaticTest.getInstance();
System.out.println("a:" + a);
System.out.println("b:" + b);
}

}

输出结果是 a=1;b=0

问题就出来了,构造器中代码a++,b++和静态语句中定义a,b到底谁会先执行?
1 假如先执行静态语句的话,a没有赋予初始值,在构造器中也没有,怎么还能运行呢?
2 假如先执行构造器的话,,

先定义变量a,b;
然后调用构造函数StaticTest()
最后给变量a,b赋值

你可以单步调试一下

先StaticTest.getInstance(); 调用构造函数,a=1,b=1
然后private static int a; a=1
private static int b = 0; b=0

为什么不试试呢。。。