Java final、finally、finalize三者的区别

Java final、finally、finalize三者的区别

一.final
  1. final可以修饰类、方法和变量。
  2. final修饰类表示不可以被继承,但是可以继承其他类。
  3. final修饰方法表示方法不可以被重写,但可以继承使用。
  4. final修饰变量表示此变量是一个常量。
二.finally
  1. finally作为异常处理的一部分,只能用在try-catch-finally中,表示其中的语句一定会被执行,经常被用在需要释放资源的情况下。
  2. 在某些特殊情况下,finally中的语句不一定会被执行,比如一个线程在执行try语句块或者catch语句块时被打断(interrupted)或者被终止(killed),与其相对应的finally语句块可能不会执行。还有更极端的情况,就是在线程运行try语句块或者catch语句块时,突然死机或者断电,finally语句块肯定不会执行。还有就是使用System.exit(0)终止JVM的运行,finally语句块肯定也不会执行。
三.finalize
  1. finalize()方法是在java.lang.Object里定义的,也就是说每个对象都有这个方法。这个方法在gc启动,对象被回收的时候被调用。其实gc可以回收大部分的对象(凡是new出来的对象,gc都能搞定,一般情况下我们又不会用new以外的方式去创建对象),一般情况下不需要我们手动实现finalize()。
  2. 特殊情况下,需要我们实现finalize(),当对象被回收的时候需要释放一些资源,比如:一个socket链接,在对象初始化时创建,整个生命周期内有效,那么就需要实现finalize(),关闭这个链接。
  3. 一个对象的finalize()方法只会被调用一次,而且finalize()被调用不意味着gc会立即回收该对象,所以有可能调用finalize()后,该对象又不需要被回收了,然后到了真正要被回收的时候,因为前面调用过一次,所以不会调用finalize(),产生问题。 所以,推荐不要使用finalize()方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值