首先是Bvar被创建出来,之后是ps1,b,c。
回收么,顺序应该是b,c,Bvar,最后是psl。为什么?因为main方法中实例化了Bvar,实例化的过程也就是分配内存空间的过程,所以,class B中的三个属性(即你所说的变量)都被创建出来了,而psl因为它是static的,所以它会到程序完全结束的时候才会被释放。public,private,这些关键字仅影响它的可见度,并不会影响到它的生命周期,而static却会影响到它的生命周期。
谢谢。

解决方案 »

  1.   

    在创建对象时,对象所在类的所有数据成员会首先进行初始化,如果其中的成员变量有对象,那么它们也会按照顺序执行初始化工作。在所有类成员初始化完成后,才调用对象所在类的构造方法创建对象。构造方法作用就是初始化。
    静态对象(变量)在非静态对象前初始化。静态对象(变量)只初始化一次,再次调用就不初始化了,但非静态对象在每次调用时都要初始化。
    程序中的主类的静态变量会在main()方法执行前进行初始化工作。
    不仅第1次创建对象时,类中所有的静态变量要初始化,第1次访问类中的静态变量(没有创建对象)时,该类中所有的静态变量也要按照它们在类中排列的顺序初始化。
    初始化的顺序包括构造方法调用的顺序如下:
    1. 主类的静态成员首先初始化。
    2. 主类的超类的构造方法按照从最高到最低的顺序被调用。
    3. 主类的非静态对象(变量)初始化。
    4. 调用主类的构造方法。
    在一个构造方法中只能调用一次其它的构造方法,并且调用构造方法的语句必须是第一条语句。
      

  2.   

    关于初始化和回收,thinking in java里有很详细的说明。
      

  3.   

    创建:psl, b, c,a,Bvar
    回收:反序
      

  4.   

    和C++不同,java不能用析构函数释放内存
    如main方法执行完后,java虚拟机会周期性的调用垃圾回收器回收内存
      

  5.   

    java虚拟机会周期性的调用垃圾回收器回收内存
      

  6.   

    wjsfr(令狐葱) 的很详细。谢谢