第3讲 | 谈谈final、 fnally、 fnalize有什么不同?

第3讲 | 谈谈fnal、 fnally、 fnalize有什么不同?

  • final可以用来修饰类、方法、变量,分别有不同的意义,
    • final修饰的class代表不可以继承扩展,
    • final的变量是不可以修改的,
    • final的方法也是不可以重写的(override)。
  • fnally则是Java保证重点代码一定要被执行的一种机制。我们可以使用try-finally或者try-catch-fnally来进行类似关闭JDBC连接、保证unlock锁等动作。
  • fnalize是基础类java.lang.Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。 fnalize机制现在已经不推荐使用,并且在JDK 9开始被标记为deprecated。
什么机制可以替换fnalize?

Java平台目前在逐步使用java.lang.ref.Cleaner来替换掉原有的fnalize实现

public class CleaningExample implements AutoCloseable {
// A cleaner, preferably one shared within a library
    private satic fnal Cleaner cleaner = <cleaner>;
    satic class State implements Runnable {
        State(...) {
        // initialize State needed for cleaning action
        }
        public void run() {
        // cleanup action accessing State, executed at mos once
        }
    }
    private fnal State;
    private fnal Cleaner.Cleanable cleanable
    public CleaningExample() {
        this.sate = new State(...);
        this.cleanable = cleaner.regiser(this, sate);
    }
    public void close() {
        cleanable.clean();
    }
}

实现AutoCloseable 重写close方法。

fanlly 不会被执行的情况
  1. try-cach 异常退出。
try{
    system.exit(1)
}fnally{
    print(abc)
}
  1. 无限循环
try{
while(ture){
    print(abc)
}
}fnally{
    print(abc)
}
  1. 线程被杀死
    当执行 try, fnally 的线程被杀死时。 fnally 也无法执行。
总结

1 不要在 fnally 中使用 return 语句。
2 fnally 总是执行,除非程序或者线程被中断

参考:
极客时间:《Java核心技术面试精讲》

本笔记根据专栏主题进行学习笔记,虽然参考了许多做了笔记,但是加上了自己的整理,跟原作者的行文可能有很大偏差。如果想查看原版请自行搜索。谢谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值