美文网首页
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