为什么输出0,1,2输出语句的情况都有

为什么输出0,1,2输出语句的情况都有

问题描述:

 public class Finalize {

    protected void finalize() {
        System.out.println("this is a finalize fanction");
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new Finalize();
        new Finalize();
        System.gc();
    }

}

这个取决于System.out和Finalize销毁的顺序,这是不确定的。如果控制台先销毁,那么就没有输出,如果某个Finalize先销毁,就输出1个。如果System.out最后销毁,就输出2个

但是可以确认的是,析构函数被执行了2次,无论输出了几行

应该是打印两行“this is a finalize fanction”,不存在打印0,1,2.