final、finally、finalize

本文介绍了Java中final、finally和finalize的用法。final可修饰类、方法和变量,有不可变特性,利于并发编程;finally是保证重点代码执行的机制;finalize用于对象回收前资源回收,但不推荐使用,可能拖慢垃圾收集,导致OOM。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

final

  1. final可以用来修饰类、方法、变量,修饰对象不同所代表的意义也不同
    • 修饰类则代表该类不可继承扩展
    • 修饰方法则代表该方法不可重写
    • 修饰变量则代表该变量某种程度不可更改。为什么说是某种程度呢,因为这需要根据变量的类型来区分
      • 如果修饰的变量是基本类型,则该变量赋值一次之后就无法修改,这是final就是不可变的标志
      • 如果修饰的变量是引用类型,那么该变量赋值一次之后,就无法修改该变量的引用,但是该引用对象的属性还是可以更改的,比较常见的就是变量引用了一个List,虽说用了final修饰,但是依然可以对该List的元素进行各种操作
  2. 将变量或参数使用final修饰可以清楚的避免意外赋值导致的编码错误
  3. 因为final修饰变量产生了某种程度的不可变的特性,所以它可以保护只读数据,因此在并发编程中使用final修饰变量有利于减少额外的同步开销,也可以省去一些防御性拷贝必要,从而提升性能

finally

finally是java保证重点代码一定要被执行的一种机制。我们可以使用try-finallytry-catch-finally来进行类型关闭JDBC链接、保证unlock锁等操作

finalize

finalize 是基础类java.lang.Object的一个方法,它的作用是保证对象在被垃圾收集器收集前完成特定资源的回收。finalize机制现在已经不推荐使用,并且在JDK9开始被标记为deprecated。

如果调用了finalize方法,则会导致该对象称为“特殊公民”,JVM需要对它进行额外的处理。这样反而导致了finalize成为了快速回收的阻碍者,它可能导致你的对象经过多个垃圾收集周期才能被回收。

在实践中因为finalize拖慢垃圾收集,导致大量对象堆积,也是一种典型的导致OOM的原因。

因为我们要确保回收资源就是因为资源都是有限的,垃圾收集的时间不可预测,可能会极大加剧资源占用。所以对于消耗非常高频的资源,千万不要指望finalize去承担资源释放的职责。

资源用完立刻显示释放,或者利用资源池尽量重用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值