Object类是所有类、数组、枚举类的父类,是类层次结构的根类。每个类都使用Object作为超类。所有对象(包括
数组)都实现这个类的方法。
Object类实现了以下方法:
我们来看看关于finalize()方法在源码中是如何定义的:
protected void finalize() throws Throwable { }
当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源。
finalize 的常规协定是:当 JavaTM 虚拟机已确定尚未终止的任何线程无法再通过任何方法访问此对象时,将调用
此方法,除非由于准备终止的其他某个对象或类的终结操作执行了某个操作。finalize 方法可以采取任何操作,其
中包括再次使此对象对其他线程可用;不过,finalize 的主要目的是在不可撤消地丢弃对象之前执行清除操作。例
如,表示输入/输出连接的对象的 finalize 方法可执行显式 I/O 事务,以便在永久丢弃对象之前中断连接。
Object 类的 finalize 方法执行非特殊性操作;它仅执行一些常规返回。Object 的子类可以重写此定义。
Java 编程语言不保证哪个线程将调用某个给定对象的 finalize 方法。但可以保证在调用 finalize 时,调用 finalize
的线程将不会持有任何用户可见的同步锁定。如果 finalize 方法抛出未捕获的异常,那么该异常将被忽略,并且该对
象的终结操作将终止。
在启用某个对象的 finalize 方法后,将不会执行进一步操作,直到 Java 虚拟机再次确定尚未终止的任何线程无法
再通过任何方法访问此对象,其中包括由准备终止的其他对象或类执行的可能操作,在执行该操作时,对象可能被
丢弃。
对于任何给定对象,Java 虚拟机最多只调用一次 finalize 方法。
finalize
方法抛出的任何异常都会导致此对象的终结操作停止,但可以通过其他方法忽略它。
转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/43917271 情绪控_
原文地址:http://blog.csdn.net/hai_qing_xu_kong/article/details/43917271