JAVA中的Static类型的变量
1.创建时间为:
a.类变量的初次定义处
b.类的static成员函数的初次访问处
c.Class.forName("YouClassName");装载相应Class类的时候
以上任何一条成立都会使Static类型变量创建2.消亡时间为:Java程序运行完毕时
1.创建时间为:
a.类变量的初次定义处
b.类的static成员函数的初次访问处
c.Class.forName("YouClassName");装载相应Class类的时候
以上任何一条成立都会使Static类型变量创建2.消亡时间为:Java程序运行完毕时
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
得。
所以你执行程序得时候,JVM就按照定义得顺序来初始化变量,关于消亡:
当然是在类消亡时候这个静态变量也消亡了-------这个当然是废话。
一个类什么时候消亡,这个是java虚拟机关心的问题,我们程序员不必关心,即使你使用了垃圾回收,也不见得马上就被回收!