这不是优先级的问题, 是因为生成了3个对象, 这时候在内存堆区域中, 这时候你需要回收的垃圾就会有3个, 而你重写了finalize方法, 垃圾回收时是会调用这个方法的, 而object类中的System.gc(), 方法里是调用了finalize(), 但一个类加载时是会出现两个线程, 主线程(非守护线程main())和垃圾回收线程(守护线程finalize()), (守护线程是依赖于非守护线程的, 当非守护线程执行完毕, 守护线程也会随之消失), 因为你调用了System.gc()方法, 是手动开启了一个垃圾回收线程, 当主线程完毕时垃圾回收线程可能回收了两个, 这时候JVM关闭了, 所以结果还有可能是下面这样:
the program is ending!
the object is going!
the object is going!请按任意键继续. . .
注意, 调用gc()不是只会执行一次finalize(), 而是会将所有垃圾对象回收, 从而调用每个对象的finalize(), finalize()是在对象销毁时调用的 |