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