美文网首页
Java-L03: final, finally, finali

Java-L03: final, finally, finali

作者: WenxuanLi | 来源:发表于2019-04-09 05:34 被阅读0次

    李文轩 2019-03-17
    声明:这是本人学习极客时间的Java核心36讲的笔记,有侵权请联系我。


    final:

    • 修饰 类、方法、变量
    • final 修饰的 class 不可以继承扩展
    • final 修饰的 变量不可被改变
    • final 修饰的 方法不可被重写(override

    用 final 的好处和目的:

    • 将方法或者类申明为 final,明确此处不得修改

      • 避免 API 使用这更改基础功能
    • 将参数或者变量申明为final,避免意外赋值

      • 保护只读数据
      • 在并发编程中,有利于减少同步开销
    • 不需要特别用来提升性能

    final 不是 immutable:

    • final 只限定引用不再被赋值,但对象行为不会被影响
    • 如果要实现 immutable 的类:
      1. class 申明为 final
      2. 将变量定义为finalprivate,也不要设置setter方法
      3. 通过深度拷贝来完成初始化(字节数组流,对象流),而不是直接赋值
      4. 如果实现getter方法,使用copy-on-write原则,建立私有的copy

    finally :

    • 用于保证重点代码一定被执行的机制

    • 通常用于异常处理机制中,不管如何,都要执行的代码

    • 例外的是,exit 和 线程中断后,finally 的代码将不会被执行

      实践:

      • try - catch - finally
      • try-witch-resource

    finalize

    • 基础类,java.lang.Object 的一个方法
    • 现在已不推荐使用
    • 目的为 保证对象在 gc 完成特定的资源回收
    • 无法保证什么时候执行,执行是否符合预期

    java.lang.ref.Cleaner来代替finalize

    • Cleaner的实现利用流幻象引用(PhantomReference),即post-mortem清理机制
    • 每个Cleaner的操作都是独立的,有自己的运行线程,避免意外死锁。
    • !!!但是不能依赖 Cleaner 来做资源回收

    相关文章

      网友评论

          本文标题:Java-L03: final, finally, finali

          本文链接:https://www.haomeiwen.com/subject/udhviqtx.html