static 修饰的属性、方法、代码块的使用实例

来源:互联网 发布:养老金网络异地认证 编辑:程序博客网 时间:2024/05/16 06:49
class StaticTest{
  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
这个程序展示了静态初始化的各种特性。如果你初次接触Java,结果可能令你吃惊。
可能会对static后加大括号感到困惑。首先要告诉你的是,
static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。
正如在程序中所表现的,虽然v出现在v1和v2的前面,但是结果却是v1和v2的初始化在v的前面。
在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,
且在类被第一次装载时。如果你能读懂并理解这段代码,会帮助你对static关键字的认识。
在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推。
非静态变量不是本文的主题,在此不做详细讨论,请参考Think in Java中的讲解。*/
原创粉丝点击