public class ToshibaTest {
static private ToshibaTest tt=new ToshibaTest();
static int count1;
static int count2=0;
ToshibaTest(){
count1++;
count2++;
}
static ToshibaTest getInstance(){
return tt;
}
public static void main(String[] args){
ToshibaTest tt=getInstance();
System.out.println(tt.count1+":"+tt.count2);
}
}
为什么输出是1:0?
java初始化是有顺序的。
先初始化静态变量,放到常量区。所以先执行
static private ToshibaTest tt=new ToshibaTest();
现在count1=1,count2=1
然后,执行static int count1;static int count2=0;
所以,输出是 1 和 0
这跟类中变量的初始化顺序有关:首先是静态变量的初始化和静态语句块的执行,然后是非静态变量的初始化,最后是构造函数的执行,静态变量和非静态变量的初始化依据其在类中的书写顺序来初始化。另外,如果是要生成子类的对象,那么则是先执行父类中部分,在执行子类中部分。