【请教】一个关于static的问题

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

这跟类中变量的初始化顺序有关:首先是静态变量的初始化和静态语句块的执行,然后是非静态变量的初始化,最后是构造函数的执行,静态变量和非静态变量的初始化依据其在类中的书写顺序来初始化。另外,如果是要生成子类的对象,那么则是先执行父类中部分,在执行子类中部分。