JAVA中的Static类型的变量
1.创建时间为:
  a.类变量的初次定义处
  b.类的static成员函数的初次访问处
  c.Class.forName("YouClassName");装载相应Class类的时候
  以上任何一条成立都会使Static类型变量创建2.消亡时间为:Java程序运行完毕时

解决方案 »

  1. 包含static变量的类第一次使用时被创建,仅被初始化一次。随类消亡而消亡。
      

  2. class Rodent{
       Rodent(){
        System.out.println("Rodent initialize");
       }
     static int prt(String s){
      System.out.println(s);
       return s.length();
     }
     static int i=prt("initialize rodent static iRodent");
      int j=prt("initialize rodent ns jRodent");
    }
     
    class Cat{
     
     static int prt(String s){
       System.out.println(s);
       return s.length();
     }
      Cat(String s){
        System.out.println("cat"+s);
      }
          static int i=prt("initialize cat static icat");
         int j=prt("initialize cat ns jcat");
    }
     
    public class Mouse extends Rodent{
      static Cat c1=new Cat("c1 static");
      Cat c2=new Cat("c2 ns");
      public static void main(String[] args) {
       System.out.println("main start");
       System.out.println(c1.j);
        System.out.println(c1.i);
         new Mouse();
     
      }
       Mouse(){
         System.out.println("Mouse initialize");
       }
    }程序运行流程解析:1、java 找到Mouse.class,发现Mouse是由Rodent继承来的,就去找Rodent,然后装入Rodent,装入后,发现Rodent中有static属性即i,所以就给i初始化,打印出"initialize rodent static iRodent"2、java装入Mouse,发现其中有static属性c1,所以就给c1初始化,准备执行new Cat("c1 static"); 这时,它发现Cat中也有static 属性,所以要先初始化Cat中的i, 所以就打印"initialize cat static icat",而后,因为要初始化Cat的对象,所以在执行构造前,要先初始化这个对象的所有属性,于是j被初始化,打印出"initialize cat ns jcat",然后,执行Cat的构造,调用Cat(String s), 打印出 cat c1 static,至此Mouse中的c1初始化完成3、java开始执行Mouse.main(),打印出"main start"4、执行System.out.println(c1.j);,打印出225、执行 System.out.println(c1.i); 打印出266、执行new Mouse(),在执行这句前,发现Mouse从Rodent继承,去先构造Rodent的对象,初始化Rodent对象里面的属性j,于是打印出"initialize rodent ns jRodent",而后调用Rodnet的构造,打印出"Rodent initialize",再回到Mouse中,先构造一个Mouse对象,为对象分配内存,而后初始化属性,于是Mouse中的属性c2就被初始化了,即为c2构造一个Cat对象,这时Cat中的属性j先被初始化,于是打印initialize cat ns jcat,再然后,调用Cat的构造,打印出Cat c2 ns,最后,回到MOUSE中,调用Mouse的构造,打印出Mouse initialize7、所以结果是:Initialize rodent static i rodentinitialize cat static i catinitialize cat ns j catcat c1 staticmain start2226initialize rodent ns j rodentrodent initializeinitialize cat ns j catcat c2 nsmouse initialize
      

  3. 大哥,你这篇关于Static变量的东东好象是从什么地方弄过来的。可以给我电子文档吗?
      

  4. static 的初始化就是一个类装载到jvm的时候,先初始化static的变量值,而且是按照顺序来
    得。
    所以你执行程序得时候,JVM就按照定义得顺序来初始化变量,关于消亡:
    当然是在类消亡时候这个静态变量也消亡了-------这个当然是废话。
    一个类什么时候消亡,这个是java虚拟机关心的问题,我们程序员不必关心,即使你使用了垃圾回收,也不见得马上就被回收!
      

类似问题 »