写出下列程序的运行结果

public class Test {
public static void main(String[] args)
{
A obj = A.getInstance();
System.out.println("obj.num1 = " + obj.num1);
System.out.println("obj.num2 = " + obj.num2);
}
}

class A
{
private static A obj = new A();
public static int num1 = 0;
public static int num2;
private A()
{
num1++;
num2++;
}
public static A getInstance()
{
return obj;
}
}

运行结果:
obj.num1 = 0
obj.num2 = 1
请问为什么 num1=0 而不等于1? 谢谢!

主要是成员变量的初始化顺序问题。

 1、A obj = A.getInstance();这里需要初始化class A,
 2、类A中成员变量有下面3个
 private static A obj = new A();//执行这里时会执行构造函数,这时候num1++,num1变成1
public static int num1 = 0;//执行完上面一句,才执行这一句,num1因为是static的,重新被置为0
public static int num2;//执行num2时,没有赋值初始值,不改变。注意默认值和赋值是2个不同的事情。

所以运行后obj.num1=0,obj.num2=1

num1是静态域,它属于类,不属于任何对象

obj.num1=0
obj.num2=1

obj.num2的初始值是0

程序运行先后的问题,当运行到num1++时num1 = 1;
num2 = 1 ,obj.num1直接调用静态num1并且被重新赋值,所以num1=0;

因为静态成员num1是属于类A成员,实例无法修改其值。要修改其值,得通过类A.num1 = 1;来修改。
还有一点,静态成员是属于类本身的,它的生命周期与类共存亡。