不使用的理由:
1.不能确定finalize()什么时候被执行
2.不能保证finalize()一定会被执行
3.使用finalize()严重影响性能
4.如果执行finalize()抛出异常,异常被忽略(不会有任何提示),此方法立刻终止执行,导致对象状态不一致
在以下情况可以谨慎使用:
1.如InputStream,如果编程者忘记调用close(),可以在finalize()里调用close()释放资源
2.在finalize()里调用native peer(指JNI里与Java对象对应的本地对象)的方法释放本地资源