java中Object类中的finalize()方法的理解

看java api文档的过程中,有时候会发现并非想象中的那么的通熟易懂,这个时候需要耐心、仔细的看,再加上一定的知识储备,就更容易看懂了。除此之外,从文档中提炼有用信息的能力也很重要!

看到finalize()方法的时候觉得很陌生,因为几乎从没用过。今天打开api文档仔细的看了关于finalize()方法的说明,有了一些自己的理解,并在这里用通俗的话讲解出来。

在此之前,先上一段java api里面的有关于finalize()方法的解释:

finalize
protected void finalize()
                 throws Throwable当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除。 
finalize 的常规协定是:当 JavaTM 虚拟机已确定尚未终止的任何线程无法再通过任何方法访问此对象时,将调用此方法,除非由于准备终止的其他某个对象或类的终结操作执行了某个操作。finalize 方法可以采取任何操作,其中包括再次使此对象对其他线程可用;不过,finalize 的主要目的是在不可撤消地丢弃对象之前执行清除操作。例如,表示输入/输出连接的对象的 finalize 方法可执行显式 I/O 事务,以便在永久丢弃对象之前中断连接。 

Object 类的 finalize 方法执行非特殊性操作;它仅执行一些常规返回。Object 的子类可以重写此定义。 

Java 编程语言不保证哪个线程将调用某个给定对象的 finalize 方法。但可以保证在调用 finalize 时,调用 finalize 的线程将不会持有任何用户可见的同步锁定。如果 finalize 方法抛出未捕获的异常,那么该异常将被忽略,并且该对象的终结操作将终止。 

在启用某个对象的 finalize 方法后,将不会执行进一步操作,直到 Java 虚拟机再次确定尚未终止的任何线程无法再通过任何方法访问此对象,其中包括由准备终止的其他对象或类执行的可能操作,在执行该操作时,对象可能被丢弃。 

对于任何给定对象,Java 虚拟机最多只调用一次 finalize 方法。 

finalize 方法抛出的任何异常都会导致此对象的终结操作停止,但可以通过其他方法忽略它。 


抛出: 
Throwable - 此方法抛出的 Exception

接下来小编就提炼一下这段话中的关键信息,把finalize用自己的话解释一下:

1、finalize的使用时机:当jvm内存中的对象已经没有引用指向它时,这个时候GC垃圾收集器会自动调用该对象的finalize()来执行一些操作。

2、finalize的用途:在gc回收对象之前执行一些清楚操作,比如说一些IO流对象和外部的连接尚未关闭,这个时候如果gc对这个对象进行回收,那么finalize可以保证这个对象被回收之前其与外部的一些连接正常关闭。

3、在GC垃圾收集器调用某个对象的finalize方法之后,jvm会再一次的执行检查该对象是否还存在其他引用。

人生漫漫,砥砺前行!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值