日期:2014-05-20  浏览次数:20727 次

Static 问题 请教~~
我想一下   这个   程序的具体执行过程,谢谢!
为什么会出现以下结果.谢谢!!
结果:
Cup(1)
Cup(2)
Cups()
Cups()
Inside   main()
f(99)
程序:
class   Cup
{
Cup(int   marker)
{
        System.out.println( "Cup( "   +   marker   +   ") ");
    }
    void   f(int   marker)
    {
    System.out.println( "f( "   +   marker   +   ") ");
    }
}

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)  
}   ///:~


------解决方案--------------------
先执行
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)



------解决方案--------------------
合一下:
huojicq() ( )
new一个对象,先执行类的static域,再执行实例域,再执行构造方法

believefym(feng) ( )
有main函数的类也一样