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

遇到一个关于静态调用方面的问题!望高手提点提点。。。
以下是源程序,有点疑惑就是对其输出结果有点疑惑!!
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);
}

}
上面程序的输出结果是:
Inside   main()
Cup(1)
Cup(2)
f(99)
为什么会出现Cup(2)?为什么在调用Cups的静态方法c1的时候会将c2也一起调用,如结果显示的那样,既然c2也被调用,那它的那个方法f()为什么不跟着一起调用呢?

以上是我这个小菜鸟提出的问题,希望高手提点提点。感激不尽。。

------解决方案--------------------
Cups类加载的时候会先执行static块
------解决方案--------------------
怎么都没有高手来回答一下啊,我刚看了,没看过这样的程序,也还没搞清楚啊。。郁闷啊。
------解决方案--------------------
静态变量初始化的时候就会执行,找本书看看,更清楚
------解决方案--------------------
new 是调用类的构造函数,c2=new Cup(2);这句话是实例话一个cup的对象,并不是调用这个类的所有方法......还是在看看书吧
------解决方案--------------------
静态块static{
c1=new Cup(1);
c2=new Cup(2);
}
会在该类被访问的时候被调用
------解决方案--------------------
你在引用Cups类时,它就会执行static{
c1=new Cup(1);
c2=new Cup(2);
}
里面的动作,他是类级别的,只要你使用了Cups类,static{
c1=new Cup(1);
c2=new Cup(2);
}里面的肯定会被执行,并不会因为你没有调用就不执行,它是自动的;