class Cup{
Cup(int er){
System.out.println("Cup("+er+")");
}
void f(int er){
System.out.println("f("+er+")");
}
}
class Cups{
static Cup c1;
static Cup c2;
static{

c1=new Cup(1);
c2=new Cup(2);
}
static{
System.out.println("dfdsfsdf");
}
Cups(){
System.out.println("Cups()");
}
}
 class ExplicitStatic {
public static void main(String[] args) {
        System.out.println("Inside main()");
        Cups.c1.f(99);//1
       
}
 //static Cups x = new Cups();//2
}
这样输出结果是:
Inside main()
Cup(1)
Cup(2)
dfdsfsdf
Cups()
Press any key to continue...
但是如果1注释掉,改成2
变成的是:
Cup(1)
Cup(2)
dfdsfsdf
Cups()
Inside main()
Press any key to continue...
Inside main()一个在前,一个在后,请问到底是什么原因啊。。求救啊。。

解决方案 »

  1.   

    class ExplicitStatic {
    public static void main(String[] args) {
    System.out.println("Inside main()");
    //Cups.c1.f(99);//1}
    static Cups x = new Cups();//2
    }
    先初始化静态域,也就是先执行2
      

  2.   

    第一种方法执行顺序应该是:
    加载类ExplicitStatic --〉执行ExplicitStatic.main()方法 --> 加载类Cups ....第二种方法执行顺序应该是:
    加载类ExplicitStatic(在此期间会加载静态类Cups并实例化) --〉执行ExplicitStatic.main()方法  ....所以Inside main()一个在前,一个在后
      

  3.   

    谢谢大家,小弟明白了不少了。大家对thinking in java有什么特别的看法,第八章以后的我看起来很吃力。