以下是源程序,有点疑惑就是对其输出结果有点疑惑!!
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);
}}
上面程序的输出结果是:
Inside main()
Cup(1)
Cup(2)
f(99)
为什么会出现Cup(2)?为什么在调用Cups的静态方法c1的时候会将c2也一起调用,如结果显示的那样,既然c2也被调用,那它的那个方法f()为什么不跟着一起调用呢?以上是我这个小菜鸟提出的问题,希望高手提点提点。感激不尽。。

解决方案 »

  1.   

    Cups类加载的时候会先执行static块
      

  2.   

    楼主,我知道了个大概了,
    就是静态块里面的都会被执行,而且是先被执行;
    看下这个程序
      public   class   Q8   
      {   
        int   i   =   20;   
             
        static   {   
        Q8   a   =   new   Q8();   
      System.out.println(a.i);   
        
        int   i   =   10;   
        System.out.println(i);   
        }  
        public   static   void   main(String[]   args)   
        {   
        System.out.println("dfdfd");
        Q8   a   =   new   Q8();   
      System.out.println(a.i);   
        }   
          
      }   
    执行结果是:
    20
    10
    dfdfd
    20
    Press any key to continue...有点不理解的是为什么System.out.println("dfdfd");在中间执行
    而你的那个程序System.out.println("Inside main()");是在最开始执行呢?
      

  3.   

    刚看了think in java,理解个皮毛而已 还不是很理解,希望有高手指点啊。。
      

  4.   

    new 是调用类的构造函数,c2=new Cup(2);这句话是实例话一个cup的对象,并不是调用这个类的所有方法......还是在看看书吧
      

  5.   

    静态块static{
    c1=new Cup(1);
    c2=new Cup(2);
    }
    会在该类被访问的时候被调用
      

  6.   

    有点不理解的是为什么System.out.println("dfdfd");在中间执行
    而你的那个程序System.out.println("Inside main()");是在最开始执行呢?===
    LZ的事写成了两个类。你这里main函数所在的类就有静态块,在执行main之前就被执行了(访问了main也是访问了这个类啊)
      

  7.   

    你在引用Cups类时,它就会执行static{
    c1=new Cup(1);
    c2=new Cup(2);
    }
    里面的动作,他是类级别的,只要你使用了Cups类,static{
    c1=new Cup(1);
    c2=new Cup(2);
    }里面的肯定会被执行,并不会因为你没有调用就不执行,它是自动的;