finalize是相当于c中的希构函数.再类被释放时执行.不过他是属于隐性调用.在整个生命周期中通过垃圾回收机制调用.
不过你的程序简单,所以在程序退出前会被调用.
同时,System.gc()显式的调用了垃圾回收机制.所以也会激发已经结束的类的finalize方法

解决方案 »

  1.   

    自然是从public类的main方法开始执行的,呵呵
      

  2.   

    Chair类的实例被创建后没有被引用,他们将被java的内存回收机制看作无用存储单元而收回,这个回收机制是作为一个低优先级的线程在后台运行的。finalize()是一个实例方法,它在实例不可用之后,回收机制回收实例之前被调用。回收机制只能将实例所占的内存资源收回,而实例可能还占有其它资源,比如打开的文件等等,这些资源可由finalize()负责收回。程序中当回收了47个chair实例后,停止创建chair。但是finalize()被调用的次数应等于chair被创建的次数。