终结方法通常是不可预测的,也是很危险的,一般情况下是不必要的。
如果我们为一个类重写写了Object类的终结方法,那么这个类的实例在被垃圾回收器回收之前会先执行终结方法,
在终结方法中,这个实例对象有可能会被重写引用,也可以用来释放一些资源文件等等,从而不被回收或者对象的善后工作。
终结方法的缺点在与不能保证会被及时的执行。当一个实例对象变得不可达,到这个实例的终结方法被执行,这之间
的时间是任意长的。甚至Java语言规范不仅不能保证对象的终结方法被及时的执行,而且根本不能保证它们会被执行。
为了不使用终结方法,但是在对象回收之前,又释放对象中封装的资源(例如文件或者线程)。我们只需要提供一个显示的终结
方法,并要求客户端代码在对象不再有用的时候,调用显示的终结方法。
显示终止方法的典型例子就是InputStream ,OutputStream 和java.sql.Connection类中的close()方法。
显示的终止方法通常与try-finally结构结合起来使用,以确保及时终止。