class Value{
  static int c=0;
  Value(){
    c=15;
  }
  Value(int i){
    c=i;
  }
  static void inc(){
    c++;
  }
}
class Count{
  public static void prt(String s){
    System.out.println(s);
  }
    Value v=new Value(10);
    static Value v1,v2;
    static{
      prt("v1.c="+v1.c+"  v2.c="+v2.c);
      v1=new Value(27);
      prt("v1.c="+v1.c+"  v2.c="+v2.c);
      v2=new Value(15);
      prt("v1.c="+v1.c+"  v2.c="+v2.c);
    }  public static void main(String[] args){
    Count ct=new Count();
    prt("ct.c="+ct.v.c);
    prt("v1.c="+v1.c+"  v2.c="+v2.c);
    v1.inc();
    prt("v1.c="+v1.c+"  v2.c="+v2.c);
    prt("ct.c="+ct.v.c);
  }
}运行结果如下:v1.c=0  v2.c=0
v1.c=27  v2.c=27
v1.c=15  v2.c=15
ct.c=10
v1.c=10  v2.c=10
v1.c=11  v2.c=11
ct.c=11
各位,上面的代码,基本上还可以看懂,但是就是不明白了class Count中跟本就没有变量c啊?但是结果却正确的输出了c的值=0;还有就是Value又没有声明是count类的父类
请问一下,ct.c=10到底是怎么算出来的?还有ct.c这个变量在哪里啊?急死我了.高手尽快帮我解决.

解决方案 »

  1.   

    你也太不仔细了,不具备做程序员的素质,要把问题 仔细看清楚再来问啊  ;
     prt("ct.c="+ct.v.c);    //ct.c 实际打印的是ct.v.c  count 类中有定义  v 吧?
     prt("ct.c="+ct.v.c);静态初始化代码块是在类加载的时候做的
     static{
          prt("v1.c="+v1.c+"  v2.c="+v2.c);
          v1=new Value(27);
          prt("v1.c="+v1.c+"  v2.c="+v2.c);
          v2=new Value(15);
          prt("v1.c="+v1.c+"  v2.c="+v2.c);
        }所以 上面的这段代码先执行