我想一下 这个 程序的具体执行过程,谢谢!
为什么会出现以下结果.谢谢!!
结果:
Cup(1)
Cup(2)
Cups()
Cups()
Inside main()
f(99)
程序:
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);
}
   Cups()
   {
     System.out.println("Cups()");
   }
}public class ExplicitStatic
{
   public static void main(String[] args)
   {
     System.out.println("Inside main()");
     Cups.c1.f(99);  // (1)
   }
   static Cups x = new Cups();  // (2)
   static Cups y = new Cups();  // (2) 
} ///:~

解决方案 »

  1.   

    先执行
     static Cups x = new Cups();  // (2)
     static Cups y = new Cups();  // (2)
    在Cups中执行static块 c1 = new Cup(1);
      c2 = new Cup(2);
    而他们都是static的,所以只有一个实例
    即只输出一次
    Cup(1)
    Cup(2)
    然后执行Cups的构造函数,输出x和y各一次构造函数输出
    Cups()
    Cups()
    再接着执行 ExplicitStatic的main函数输出Inside main()
    而后执行f函数输出f(99)
      

  2.   

    为什么不是从main()开始执行呢
    应该是先执行 System.out.println("Inside main()");啊.这应该怎么解释???public static void main(String[] args)
      {
        System.out.println("Inside main()");
        Cups.c1.f(99);  // (1)
      }
      

  3.   

    看看thinking in java
    先执行static的fields,有main函数的类也一样
      

  4.   

    new一个对象,先执行类的static域,再执行实例域,再执行构造方法
      

  5.   

    合一下:
    huojicq() ( ) 
          new一个对象,先执行类的static域,再执行实例域,再执行构造方法
      
    believefym(feng) ( )
              有main函数的类也一样